代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

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

  •  2
  • Zachary Scott  · 技术社区  · 15 年前

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

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

    在Windows2008iis7和MVC2设置中,我们转到这里:

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

    然后在应用程序错误方法下,我们得到:

    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 回复  |  直到 15 年前
        1
  •  2
  •   J.W.    15 年前

    MVC具有处理权限。您可以将其自定义为仅处理404或其他类型的错误。

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

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

    这是一个 link 关于如何处理404个错误,作者提供了几种处理方法。

        2
  •  2
  •   Nick Johnson    15 年前

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

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