ASP.NET MVC 5 error handling
The best way is using Global.Asax, because you can manage all types of errors (Ajax calls/ all of unexpected Errors). with others you can't do it.
Like this:
protected void Application_Error()
{
HttpContext httpContext = HttpContext.Current;
if (httpContext != null)
{
RequestContext requestContext = ((MvcHandler)httpContext.CurrentHandler).RequestContext;
/* When the request is ajax the system can automatically handle a mistake with a JSON response.
Then overwrites the default response */
if (requestContext.HttpContext.Request.IsAjaxRequest())
{
httpContext.Response.Clear();
string controllerName = requestContext.RouteData.GetRequiredString("controller");
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(requestContext, controllerName);
ControllerContext controllerContext = new ControllerContext(requestContext, (ControllerBase)controller);
JsonResult jsonResult = new JsonResult
{
Data = new { success = false, serverError = "500" },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
jsonResult.ExecuteResult(controllerContext);
httpContext.Response.End();
}
else
{
httpContext.Response.Redirect("~/Error");
}
}
}
There is no golden solution to all applications.
You can display a friendly error page by using httpErrors in web.config. Unlike customErrors this is an IIS level setting and will even show you a friendly error page for errors which are not from within ASP.NET.
For error logging I would recommend to go with a HttpModule like ELMAH: https://code.google.com/p/elmah/
I wrote a whole blog post about this and where I explain the different ways of error handling: http://dusted.codes/demystifying-aspnet-mvc-5-error-pages-and-error-logging