2010-02-12 32 views
1

我想處理由ErrorView模型和錯誤視圖的任何控制器操作拋出的異常。當時的想法是有類似:C#使用屬性來處理MVC中的異常

[InformClientOfExceptions(typeof(MyErrorHandler))] 
public ActionResult MyAction(Int32 someId) 
{ 
    //...code 
} 

那麼也許有一些類MyErrorHandler它實現了一個新的接口IErrorView:當異常是由操作拋出

​​

,屬性廚師組成類指定並將異常傳遞給它,然後處理異常(以基本格式格式化並輸出)。現在是的,例外應該永遠不會發生,或者至少要妥善處理,但我希望有更好的寫法。我不想使用自定義錯誤頁面,因爲我想擴展此模式以允許對某些類型的異常做出更復雜的響應。任何想法如何最好地解決這個問題?

+0

重複? http://stackoverflow.com/questions/183316/asp-net-mvc-handleerror – ziya 2010-02-12 16:47:10

+0

我不同意它是一個重複的問題,因爲他真的要問如何處理使用AOP的錯誤,以及與哪些選項可用來實現AOP善良與ASP.NET MVC相結合。 – 2010-02-12 16:55:28

回答

1

[HandleError]默認情況下會查找Error視圖。您可以指定視圖,並通過與異常參數

[HandleError(ExceptionType = typeof(ArgumentException), View = "ErrorViewForThatException"] 

限制你可以把屬性上無論是動作還是控制器類。它並不完全符合你的要求,但它非常接近。

0

你試過[HandleError]

0

創建一個從FilterAttribute繼承並實現IExceptionFilter屬性的類(類似那樣)。這種組合用於記錄異常,並且可以採用用於記錄異常的對象類型,如您所指定的。

0

除了如果您使用MVC中默認包含的構造,如[HandleError]方法,您實際上正在討論的是面向方面編程(AOP)。要實現類似於AOP的解決方案,您需要使用一個將在代碼中合併的Postbuild編織框架,以實現您想要的結果,例如PostSharp或LinFu.AOP。爲了在沒有構建編織框架的情況下實現這一點,您需要通過界面和使用動態代理(如Castle.DynamicProxy或LinFu.DynamicProxy)來處理它。