ASP.NET 指定頁面跳過 IIS 的自定錯誤畫面,並且回傳長度 = 0 ?

ASP.NET 指定頁面跳過 IIS 的自定錯誤畫面,並且回傳長度 = 0 ?

 

情境

 

大家都知道 IIS 上若是出現了 HTTP 500 或是 400 會出現 下列 IIS 專有的錯誤訊息

圖片來源:http://blogs.msdn.com/blogfiles/webtopics/WindowsLiveWriter/TroubleshootingusingFREBpart1_3129/

 

但若是要指定頁面回傳的內容必須清空呢? 這可傷透腦筋了。

原本是想說調整 IIS Error Page ,但回傳的內容長度又必須是 0 應該怎麼辦?

 

解法

經過兩三種方式的確認後,最簡單方式是用 ASP.NET 的機制是透過 Response TrySkipIisCustomErrors 這個屬性來讓 IIS 不要顯示 IIS 獨有的錯誤內容。

 

直接在 .aspx.cs 下新增以下的程式碼  ( 為了方便驗證,直接在 response 將 200 改成 400 )

protected override void Render(HtmlTextWriter writer)

{

     ////base.Render(writer);

     Response.Clear();

     Response.ClearContent();

     Response.ClearHeaders();

     Response.TrySkipIisCustomErrors = true;

     Response.StatusCode = 400;

     Response.End();

}

 

就可以看到頁面在回應的時候會出現 HTTP 400 的錯誤訊息以及 Content-Length 為 0 即符合客戶的要求

clip_image002