How i can use the CustomExceptionFilter, so that my all the exceptions are returned from this filter and how i can pass status code and message in response body as well. Or is there any better way to handle this.
public class CustomExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
HttpStatusCode status = HttpStatusCode.InternalServerError;
String message = String.Empty;
var exceptionType = actionExecutedContext.Exception.GetType();
if (exceptionType == typeof(UnauthorizedAccessException))
{
message = "Access to the Web API is not authorized.";
status = HttpStatusCode.Unauthorized;
}
else if (exceptionType == typeof(DivideByZeroException))
{
message = "Internal Server Error.";
status = HttpStatusCode.InternalServerError;
}
else
{
message = "Not found.";
status = HttpStatusCode.NotFound;
}
actionExecutedContext.Response = new HttpResponseMessage()
{
Content = new StringContent(message, System.Text.Encoding.UTF8, "text/plain"),
StatusCode = status
};
base.OnException(actionExecutedContext);
}
}
[HttpPost]
[CustomExceptionFilter]
public IHttpActionResult xyz([FromBody]ABCrequest model)
{
if (ModelState.IsValid)
{
return Ok();
}
return new ResponseMessageResult(
Request.CreateErrorResponse((HttpStatusCode)101,new HttpError( "Exception"))
);
}