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

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

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

点赞