404 Http-обработчик ошибок в Asp.Net MVC (RC 5)

Как я могу обработать ошибки 404 без фреймворка, выбрасывающего код ошибки Exception 500?

Ответ 1

http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx дает следующее объяснение:

Добавьте правило маршрутизации подстановки в качестве вашего окончательного правила:

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

Любой запрос, который не соответствует другому правилу, перенаправляется на действие Http404 контроллера Error, которое также необходимо настроить:

public ActionResult Http404(string url) {
    Response.StatusCode = 404;
    ViewData["url"] = url;
    return View();
}

Ответ 2

Вы также можете переопределить HandleUnknownAction в своем контроллере в случаях, когда запрос соответствует контроллеру, но не соответствует действию. Реализация по умолчанию вызывает ошибку 404.

Ответ 3

throw new HttpException (404, "Ресурс не найден" );

Ответ 4

С MVC 3 вы можете вернуть HttpNotFound(), чтобы правильно вернуть 404.

Вот так:

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

    fontName = HttpUtility.UrlDecode(fontName);

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

    return View(font);
}