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 即符合客戶的要求