这是我的 web.config 自定义错误配置:
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/400.aspx">
<error statusCode="404" redirect="~/404.aspx" />
<error statusCode="500" redirect="~/500.aspx" />
<error statusCode="400" redirect="~/400.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="404.html" responseMode="File"/>
<remove statusCode="500"/>
<error statusCode="500" path="500.html" responseMode="File"/>
<remove statusCode="400"/>
<error statusCode="400" path="400.html" responseMode="File"/>
</httpErrors>
</system.webServer>
适用于 404。
但是这个 localhost:44303/ 返回:运行时错误。
从一个 Action 中抛出一个新的异常会有意重定向到 mvc 错误页面,我想用我的 500.aspx 覆盖它
最佳答案
在对 HandleErrorAttribute
的源代码进行了一些研究之后作为全局过滤器添加的代码,尝试强制应用程序使用 MVC 错误页面。
所以我所做的是子类化 HandleErrorAttribute
并有效地扭转那条线:
public class MyHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
filterContext.HttpContext.Response.TrySkipIisCustomErrors = false;
}
}
然后替换 App_Start/FilterConfig.cs 中的代码以使用新的 MyHandleErrorAttribute:
filters.Add(new MyHandleErrorAttribute());
这应该可以防止 MVC 覆盖您的自定义 500 页。
关于asp.net-mvc - 自定义 500 错误页面在 ASP.NET MVC 5 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868805/