使用自定义错误页面/错误地址

时间:2014-01-10 02:00:33

标签: c# asp.net custom-error-pages

我正在尝试强制我的项目使用自定义错误页面/错误地址。

我确实在控制器中编写了ActionResult Error函数

    public ActionResult Error()
    {
        return View();
    }

制作了一个简单的错误视图

@{
    ViewBag.Title = "Error Page";
}

<h1>ERROR</h1>

向全局

添加了错误路由
routes.MapRoute(
    "Error",
    "Error/",
    new { controller = "Home", action = "Error" }
);

并更改了webconfig customErrors

<customErrors mode="On" defaultRedirect="Error">
</customErrors>

但是当我输入不存在的网址时,我得到了

  '/'应用程序中的服务器错误。无法找到资源。

     

描述:HTTP 404.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。

     

请求的网址:/ Galery

     

版本信息:Microsoft .NET Framework版本:2.0.50727.1433;   ASP.NET版本:2.0.50727.1433
  ------&GT;

我做错了什么。

好吧,如果我键入localpath /错误,我可以访问错误路径,它工作正常。为什么重定向不起作用?

我正在使用VS2012,服务器由它启动。

2 个答案:

答案 0 :(得分:1)

错误和404不是一回事。您的自定义错误内容会触发unhandled exception,但404不会将unhandled exception视为MVC framework。创建“{allthing}”的“catch-all”路由并将其路由到错误操作方法。

另外请确保将此路线设为非常最后的路线,以便其他路线不会被捕获。

答案 1 :(得分:1)

您还必须覆盖<system.webServer>错误块以捕获IIS级错误:

<configuration>
<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="PassThrough">
          <clear />
          <error statusCode="502" path="/Error" responseMode="File" />
          <error statusCode="501" path="/Error" responseMode="File" />
          <error statusCode="500" path="/Error" responseMode="File" />
          <error statusCode="412" path="/Error" responseMode="File" />
          <error statusCode="406" path="/Error" responseMode="File" />
          <error statusCode="405" path="/Error" responseMode="File" />
          <error statusCode="404" path="/Error" responseMode="File" />
          <error statusCode="403" path="/Error" responseMode="File" />
          <error statusCode="402" path="/Error" responseMode="File" />
          <error statusCode="401" path="/Error" responseMode="File" />
    </httpErrors>
</system.webServer>
</configuration>