How can I properly handle 404s in ASP.NET MVC?

Posted by Brian on Stack Overflow See other posts from Stack Overflow or by Brian
Published on 2009-03-06T18:21:39Z Indexed on 2010/04/05 5:53 UTC
Read the original article Hit count: 294

Filed under:

I am just getting started on ASP.NET MVC so bear with me. I've searched around this site and various others and have seen a few implementations of this.

EDIT: I forgot to mention I am using RC2

Using URL Routing:

routes.MapRoute(
            "Error",
            "{*url}",
            new { controller = "Errors", action = "NotFound" }  //404s
        );

The above seems to take care of requests like this (assuming default route tables setup by initial MVC project): "/blah/blah/blah/blah"

Overriding HandleUnknownAction() in the controller itself:

//404s - handle here (bad action requested
    protected override void HandleUnknownAction(string actionName) {
        ViewData["actionName"] = actionName;
        View("NotFound").ExecuteResult(this.ControllerContext);
    }

However the previous strategies do not handle a request to a Bad/Unknown controller. For example, I do not have a "/IDoNotExist", if I request this I get the generic 404 page from the web server and not my 404 if I use routing + override.

So finally, my question is: Is there any way to catch this type of request using a route or something else in the MVC framework itself?

OR should I just default to using Web.Config customErrors as my 404 handler and forget all this? I assume if I go with customErrors I'll have to store the generic 404 page outside of /Views due to the Web.Config restrictions on direct access. Anyway any best practices or guidance is appreciated.

© Stack Overflow or respective owner

Related posts about asp.net-mvc