摘要:以ActionFilter+HandleErrorAttribute來處理伺服器錯誤
一個網站裡, 常常會因為沒注意, 就寫了會發生Exception的Code. 或是忘了用try catch包起來的地方.
一旦發生Exception, 就會產生黃色的死亡頁面. 這時候 來自澳洲的 客戶就會 靠么 說你不專業~
所以, 就用一個方法, 一次把所有的Exception解決掉~就是用ActionFilter+HandleErrorAttribute
ActionFilter是MVC中, 一個橫切式的關注點分離(<- 這邊好難形容, 不知道有沒有更好一點的形容詞). 讓你能夠以簡易的方法, 來處理Controller上的Action.
以下就展示以ActionFilter及HandleErrorAttribute來處理Exception.
要展示, 最快展示程式的就是抬出最好的示範專案 - VS 2012內建的 ASP.NET MVC 4 Web 應用程式 / 網際網路應用程式
專案建立以後, 自動就會幫你加GlobalFilters在Global.asax.cs裡
ActionFilter在Global, 所以叫GlobalFilters~XD. 聽說好像是MVC 3以後的新功能, 不過還沒測試在MVC 2上可不可以這樣搞. (後記: MVC 2確定不行, 因為MVC 2少了GlobalFilterCollection, MVC 2 要用其他的方式處理)
按了F12之後, 就會看到原來已經幫我們把HandleErrorAttribute也加進來了
在Views/Shared底下也做好一個預設的錯誤頁面
現在做個測試, 在About裡加一個Exception
按Ctrl-F5執行一下, 就會得到伺服器錯誤啦~~~
咦?! 等等, 我們不是已經設定了GlobalFilters跟HandleErrorAttribute嗎? 怎麼還會得到伺服器錯誤?! 難道是機器上的乖乖過期了?!
因此, 先檢查乖乖是不是已經過期
這是因為預設近端會直接顯示錯誤而非顯示CustomErrors, 所以在Web.config的<system.web>裡面加上一行<customErrors mode="On"/>
接下來就會顯示設定好的錯誤頁面
看到這裡, 錯誤都已經被Handle了. 但是客戶一定不滿足, 因為 他來自澳洲 客戶想要的更多.
因此, 就要加強控制一下.
先加一個強型別的View
當然就是加入顯示錯誤的Tag及Code
然後回頭去把會觸發錯誤的地方稍微修改一下, 讓他指向新的錯誤頁面.
Ctrl-F5執行一下
只要客戶 不是從澳洲來 好溝通, 版面稍微改一改, 應該可以輕易的達成客戶的要求.
今天的展示就到這邊~~~感謝各位











