2012-04-27 68 views
7

我知道有很多問題SO關於ASP.NET MVC中的錯誤處理[HandleError]優於Application_Error

我看,大多人都試圖實現的事情在三個方面:

  1. 創建BaseController並覆蓋OnException方法

  2. 使用[HandleError]或定製的異常過濾器。

  3. Application_Error中的global.asax.cs

前兩種方式不能處理所有的異常,他們只能做由操作方法/過濾器引發的事件,所以很明顯,第三個是將成爲全球異常處理程序的最佳方法。

我的問題是爲什麼我應該去[HandleError]的方法?它帶來了什麼好處,我無法通過Application_Error

最後,我想在MVC應用程序中認真考慮customErrors部分?

注:我的要求是通常的。每當發生異常時,記錄並返回一個自定義錯誤頁面。自定義錯誤頁面可能會根據狀態代碼而改變。

回答

8

最明顯的是[HandleError]允許您在不同的控制器和操作中以不同的方式處理錯誤。它比你的Application_Error處理程序中的某種switch語句更優雅。

另一個好處是[HandleError]仍然可以訪問控制器以及隨附的所有MVC優點,所以您仍然可以返回View或調用其他操作。一旦你掉到Application_Error,你已經失去了ControllerContext,除了重定向之外,你真的沒有選擇餘地。

+1

我不明白爲什麼有人想要在不同的控制器和操作中以不同的方式處理錯誤。好的,如果我在[HandleError]中執行該邏輯,那麼我又想在global.asax中這麼做嗎? – VJAI 2012-04-27 17:25:21

+1

針對手機的不同錯誤頁面?用戶的個性化錯誤頁面? Html片段的Ajax請求?自定義錯誤圖像的破碎圖像鏈接?爲某些控制器訪問禁止的錯誤頁面?想想以不同方式處理錯誤的理由並不難。 – bhamlin 2012-04-27 19:58:05