Asp.net mvc 自定义500错误页在ASP.NET MVC 5中不起作用
以下是我的web.config自定义错误配置:Asp.net mvc 自定义500错误页在ASP.NET MVC 5中不起作用,asp.net-mvc,error-handling,web-config,asp.net-mvc-5,custom-error-pages,Asp.net Mvc,Error Handling,Web Config,Asp.net Mvc 5,Custom Error Pages,以下是我的web.config自定义错误配置: <system.web> <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/400.aspx"> <error statusCode="404" redirect="~/404.aspx" /> <error statusCode="500" redirect="~/500.aspx" />
<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/返回:运行时错误
另外,从一个动作中抛出一个新的异常会故意重定向到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页