[創意料理] 個人常用的 ASP.NET MVC 自訂 HTTP 回應碼畫面的套路

如果我們認真要用 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。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學