4

這裏是我的web.config的自定義錯誤配置:自定義500錯誤頁面在ASP.NET不工作MVC 5

爲404
<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> 

工作正常,但該本地主機:44303/< SCRIPT> < /腳本>返回:運行時錯誤。

除了拋出一個新的異常從動作故意重定向到MVC的錯誤頁面,我想重寫我的500.aspx

回答

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頁面。