Asp.net-Mvc

ASP.NET MVC4 CustomErrors DefaultRedirect 被忽略

  • March 4, 2019

我有一個 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");
   }
}

引用自:https://stackoverflow.com/questions/17636806