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

标签 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/ 返回:运行时错误。

从一个 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/

相关文章:

xml - SMTP Appender - log4net 问题

c# - 根据环境更改 WCF 服务引用 URL

c# - 无法访问 ViewModel 的属性

asp.net-mvc - 如何在区域中使用公共(public) _ViewStart?

c++ - 断言是邪恶的吗?

error-handling - DB2 - CLI0108E 通信链路故障。 SQLSTATE=40003

python - pandas.errors.EmptyDataError,但文件不为空

msbuild - XmlMassUpdate - 如何删除节点

c# - MVC ASP.NET 从 View 到 Controller 获取 52 个文本框键/值的最佳方法

c# - ASP.NET MVC 项目层