Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

создать новое исключение HttpException (404, "Ресурс не найден");

С помощью 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top