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

时间:2015-01-09 20:35:00

标签: 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" />
  <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 /&lt;脚本&gt;&lt; / script&gt;返回:运行时错误。

同样从一个动作中抛出一个新的异常故意重定向到mvc错误页面,我想用我的500.aspx覆盖

1 个答案:

答案 0 :(得分:2)

在对作为全局过滤器添加的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页。