Asp.net mvc 自定义500错误页在ASP.NET MVC 5中不起作用

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" />

以下是我的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/返回:运行时错误


另外,从一个动作中抛出一个新的异常会故意重定向到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页