我正在尝试强制我的项目使用自定义错误页面/错误地址。
我确实在控制器中编写了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,服务器由它启动。
答案 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>