404 Http error handler in Asp.Net MVC (RC 5)
Asked Answered
M

4

20

How can I Handler 404 errors without the framework throwing an Exception 500 error code?

Mushro answered 20/9, 2008 at 17:31 Comment(0)
V
21

http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx gives the following explanation:

Add a wildcard routing rule as your final rule:

routes.MapRoute("Error", 
                "{*url}", 
                new { controller = "Error", action = "Http404" });

Any request that doesn't match another rule gets routed to the Http404 action of the Error controller, which you also need to configure:

public ActionResult Http404(string url) {
    Response.StatusCode = 404;
    ViewData["url"] = url;
    return View();
}
Venditti answered 20/9, 2008 at 17:38 Comment(5)
Just an FYI, The above linked post is returning a 404 (oh the irony). The new address is: jason.whitehorn.ws/2008/06/17/…Elflock
The only problem here is that so much matches the typical /{controller}/{action}/{id} route. To get around the problem, I explicitly defined all my routes and got rid of it.Chongchoo
Unfortunatelly the link doesn't work. Even jason.whitehorn.ws is not accessible :|Haftarah
This is fine for situations where routes don't match, but doesn't help when an id is not valid for example...Swallowtail
@JasonWhitehorn 404 againComplicity
S
9

You can also override HandleUnknownAction within your controller in the cases where a request does match a controller, but doesn't match an action. The default implementation does raise a 404 error.

Scalage answered 21/9, 2008 at 17:48 Comment(1)
Good idea. Check out this solution which incorporates a HandleUnknownAction override: #620395Burris
P
4

throw new HttpException(404, "Resource Not Found");

Popeyed answered 10/5, 2010 at 14:33 Comment(0)
C
0

With MVC 3 you can return HttpNotFound() to properly return a 404.

Like this:

public ActionResult Download(string fontName)
{
    FontCache.InitalizeFonts();

    fontName = HttpUtility.UrlDecode(fontName);

    var font = FontCache.GetFontByName(fontName);
    if (font == null)
        return HttpNotFound();

    return View(font);
}
Castiglione answered 15/12, 2011 at 19:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.