如何将MVC URL错误路由到我们选择的视图?

时间:2010-01-22 20:57:51

标签: asp.net-mvc http-status-code-404 asp.net-mvc-routing

如果我们使用这条标准路线:

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

在具有MVC 2设置的Windows 2008 IIS7中,我们转到此处:

"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服务器错误页面,而不是获得我们期望的路线和页面。知道如何捕获URL错误并将它们引导到我们选择的页面吗?

2 个答案:

答案 0 :(得分:2)

MVC有HandleErrorAttribute。您可以对其进行自定义以仅处理404或其他类型的错误。

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

您可以将不同类型的异常与不同的视图相关联。在上面的例子中,当动作抛出ResourceNotFoundException时,它将呈现ResourceNotFound视图。

以下是关于如何处理404错误的link,作者提供了几种处理错误的方法。

答案 1 :(得分:2)

你可以在web.config中这样做。

    <customErrors mode="Off" defaultRedirect="~/Error/">
        <error statusCode="403" redirect="~/Error/Forbidden" />
        <error statusCode="404" redirect="~/Error/PageNotFound" />
    </customErrors>