自定義了錯誤頁面,但IIS卻顯示http服務器內部500錯誤的解決辦法

1. 激活異常過濾器

當自定義異常被捕獲時,異常過濾器變爲可用。爲了能夠獲得自定義異常,打開Web.config文件,在System.Web.Section下方添加自定義錯誤信息。

   <system.web>
      <customErrors mode="On"></customErrors>
</system.web>
2. 創建Error View
在“~/Views/Shared”文件夾下,會發現存在“Error.cshtml”文件,該文件是由MVC 模板提供的,如果沒有自動創建,該文件也可以手動完成。

3. 綁定異常過濾器

將過濾器綁定到action方法或controller上,不需要手動執行,打開 App_Start folder文件夾中的 FilterConfig.cs文件。在 RegisterGlobalFilters 方法中會看到

複製代碼
public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            //filters.Add(new AuthorizeAttribute());
        }
    }
複製代碼

如果需要刪除全局過濾器,那麼會將過濾器綁定到action 或controller層,如下:

   [AdminFilter]
   [HandleError]
   public async Task<ActionResult> Upload(FileUploadViewModel model)
但是不建議這麼做,最好是在全局中應用

4. 在View中顯示錯誤信息
將Error View轉換爲HandleErrorInfo類的強類型View,並在View中顯示錯誤信息。
複製代碼
@model HandleErrorInfo
@{
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width" />
    <title>錯誤</title>
</head>
<body>
    <hgroup>
        <h1>錯誤。</h1>
        <h2>處理你的請求時出錯。</h2>
    </hgroup>
    Error Message :@Model.Exception.Message<br />
    Controller: @Model.ControllerName<br />
    Action: @Model.ActionName

</body>
</html>
複製代碼

5. 運行後故意出錯,顯示的卻是http服務器內部500錯誤,並不顯示Error中的自定義錯誤信息。解決辦法:
在IE瀏覽器下點擊 工具-internet選項-高級,滾動條拉到最後,將“顯示友好HTTP錯誤信息”前的勾去掉,確定,這時刷新“500內部服務器錯誤”頁面,或者重新啓動該頁面,頁面便會彈出新的報錯項目,這是網頁報錯的信息便會告訴你是原因導致此錯誤發生。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章