如果我們認真要用 ASP.NET MVC 做一個對外服務的網站,直接赤裸裸地爆黃白畫面在使用者面前,實在不是那麼優雅,如果從 Web.config 著手要自訂錯誤畫面的話,那麼 Google 到的答案大致就兩個方向:<system.web>/<customErrors>
及 <system.webServer>/<httpErrors>
。
<system.web>/<customErrors> 及 <system.webServer>/<httpErrors> 兩者的差別就請參考黑大的文章,知道了它們倆個的差異之後,我提供一個我個人常用的自訂 HTTP 回應碼畫面的套路。
首先將 <system.web>/<customErrors> 的 Mode
設成 Off
,也就是不自訂 ASP.NET 的 Error Pages。
接著設定 <system.webServer>/<httpErrors> HTTP 回應碼的 Error Path,responseMode
設成 ExecuteURL
,同時也新增一個 ErrorController
裡面放置各個 HTTP 回應碼的自訂畫面。
然後我們在 Web.Release.config
透過 XDT(XML Document Transform)
的方式將 httpError 的 existingResponse
屬性值設成 Replace
,目的是為了能在開發時期得到比較詳細的錯誤訊息。
這樣在發佈上線之後黃白畫面就能被我們轉換掉,但是在開發時期我們依舊可以看到黃白畫面方便追蹤錯誤。
最後,如果想要在發生 Exception 的時候做 Log,就自訂一個 ExceptionHandlerAttribute
,註冊在 GlobalFilters 裡面,用來攔截整個 ASP.NET MVC 應用程式拋出去的 Exception。