这是我的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覆盖
答案 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页。