I want a custom error page shown for 500, 404 and 403. Here’s what I have done:
-
Enabled custom errors in the web.config as follows:
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> <error statusCode="403" redirect="~/Views/Shared/UnauthorizedAccess.cshtml" /> <error statusCode="404" redirect="~/Views/Shared/FileNotFound.cshtml" /> </customErrors> -
Registered
HandleErrorAttributeas a global action filter in theFilterConfigclass as follows:public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new CustomHandleErrorAttribute()); filters.Add(new AuthorizeAttribute()); } -
Created a custom error page for each of the above messages. The default one for 500 was already available out of the box.
-
Declared in each custom error page view that the model for the page is
System.Web.Mvc.HandleErrorInfo
For 500, it shows the custom error page. For others, it doesn’t.
Is there something I am missing?
It does look like this is not all there is to displaying custom errors as I read through the code in the OnException method of the HandleErrorAttribute class and it is handling only 500.
What do I have to do to handle other errors?
My current setup (on MVC3, but I think it still applies) relies on having an
ErrorController, so I use:And the controller contains the following:
And the views just the way you implement them. I tend to add a bit of logic though, to show the stack trace and error information if the application is in debug mode. So Error.cshtml looks something like this: