Asp.net-Mvc
ASP.NET MVC4 CustomErrors DefaultRedirect 被忽略
我有一個 MVC 4 應用程序,使用自定義 HandleErrorAttribute 僅處理自定義異常。我想攔截預設的 404 和其他非 500 錯誤頁面,並用更有吸引力的東西替換它們。為此,我在我的 Web.config 中添加了以下內容:
<system.web> <customErrors mode="On" defaultRedirect="~/Error/Index" /> ... </ system.web>我有一個帶有 Index 方法和相應視圖的錯誤控制器,但我仍然得到預設的 404 錯誤頁面。我也嘗試將我的設置
defaultRedirect為靜態 html 文件無濟於事。我嘗試添加特定於 404 內部的錯誤處理<customErrors>,甚至嘗試以程式方式修改路由,但都沒有結果。我錯過了什麼?為什麼 ASP 忽略我的預設錯誤處理?注意:我之前註意到我無法在本地測試我的 CustomHandleErrorAttribute,即使使用
<customErrors mode="On". 當我從我的開發箱在我的伺服器上點擊它時它確實有效……但不確定這是否相關。 這個人也有同樣的問題。
這應該工作:
1.Web.Config
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> <error statusCode="403" redirect="~/Views/Shared/UnauthorizedAccess.cshtml" /> <error statusCode="404" redirect="~/Views/Shared/FileNotFound.cshtml" /> </customErrors>2.在FilterConfig類中註冊HandleErrorAttribute作為全域動作過濾器如下
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new CustomHandleErrorAttribute()); filters.Add(new AuthorizeAttribute()); }如果那不起作用,請嘗試通過檢查 Global.asax 中的以下狀態程式碼來讓自己傳輸響應:至少它必須起作用。
void Application_EndRequest(object sender, EventArgs e) { if (Response.StatusCode == 401) { Response.ClearContent(); Server.Transfer("~/Views/Shared/UnauthorizedAccess.cshtml"); } }