Как направить ошибки URL MVC на наш выбор? - PullRequest
2 голосов
/ 22 января 2010

Если мы используем этот стандартный маршрут:

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

и в Windows 2008 IIS7 с настройкой MVC 2 мы идем сюда:

"http://www.mywebsite.com/SomePageThatDoesNotExist.aspx"

и затем в методе Application_Error мы имеем это:

protected void Application_Error(object sender, EventArgs e)
{
     Response.Clear();

     RouteData routeData = new RouteData();
     routeData.Values.Add("controller", "Error");
     routeData.Values.Add("action", "Index");

     Server.ClearError();

     IController errorController = new ErrorController();
     errorController.Execute(new RequestContext(
         new HttpContextWrapper(Context), routeData));
}

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

Ответы [ 2 ]

2 голосов
/ 23 января 2010

Вы можете сделать это в файле web.config следующим образом.

    <customErrors mode="Off" defaultRedirect="~/Error/">
        <error statusCode="403" redirect="~/Error/Forbidden" />
        <error statusCode="404" redirect="~/Error/PageNotFound" />
    </customErrors>
2 голосов
/ 23 января 2010

MVC имеет атрибут HandleErrorAttribute. Вы можете настроить его для обработки только 404 или других типов ошибок.

[HandleError(ExceptionType = typeof(ResourceNotFoundException),
    View = "ResourceNotFound")]

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

Вот ссылка о том, как обрабатывать 404 ошибки, автор предоставил несколько способов ее обработки.

...