2010-04-22 58 views
4

處理控制器構造函數中發生的異常的最佳方法是什麼?處理在asp.net MVC控制器構造函數中發生的異常

我所能想到的是使用Application_OnError()或在我的ControllerFactory中放置一個try/catch。

這些解決方案都不理想。 Application_OnError廣泛 - 我有一些非mvc內容在網站上有自己的錯誤處理。

使用try/catch塊看起來還挺有趣的。

如果我服務於不同的內容類型-html/text/json/rss ....我希望能夠處理操作方法內的異常,而不必編寫各種條件來確定什麼樣的錯誤信息服務。

我在這裏錯過了什麼,或者有其他人處理過嗎?

回答

6

如果在首先創建控制器時ControllerFactory中發生了異常,那麼您無法在操作方法中處理該異常。

就我個人而言,我只是做一個try/catch,實例化一些錯誤處理控制器,並通過它轉發請求。

一個更好的問題是 - 你的控制器如此依賴於那個控制器沒有得到滿足,他們在構造時必須拋出異常?表面上,簡單地創建控制器不應該是一個巨大的例外來源。如果他們是,也許你可以看看懶惰地實例化動作方法(而不是構造函數)中的依賴關係,並實現ErrorHandlingController approach。這會將異常「向下」推入控制器本身,因此您可以採取更多以控制器爲中心的方法來處理它們。

+0

謝謝。我在初始化數據庫連接的構造函數中有一些存儲庫連接代碼。我現在懶加載它。 – Jason 2010-04-23 15:04:56

+0

或注入一個有代碼的工廠來捕捉任何異常並正確處理它們。 – 2015-07-10 19:00:17