2016-07-15 59 views
0

用MVC + Postsharp處理異常。 這是我的項目架構用MVC + Postsharp處理MVC異常

MVC項目 - >>>業務層 - 數據層>>>

MVC項目(在全局文件添加自定義過濾器並創建了一個基本控制器捕捉異常。)

業務層(中間件)

數據層(連接到Postgres數據庫服務器,並獲取數據。)

在DataLayer中,我添加了PostSharp來處理來自數據庫端的異常,並使用NLog記錄/電子郵件。 現在從這裏我想告訴MVC異常管道向用戶顯示正確的消息,發生了一些異常。所以我使用

args.FlowBehavior = FlowBehavior.ThrowException; 

現在我在MVC OnException方法中捕獲此異常。

問題:我也在MVC異常方法中記錄和發送異常的電子郵件,以及發生在MVC端的任何異常。

現在的問題是我已經記錄併發送了由Postsharp處理的exeption的電子郵件,現在當它到達MVC時異常處理程序將再次執行該操作。

我怎樣才能知道在MVC的異常已經被記錄。 我可以做什麼在Postsharp結束像發送一些參數,我可以在MVC異常處理程序檢查。

請提出一個解決方案或指導,以解決此問題

回答

1

爲什麼你想處理在2個地方例外。只需選擇postsharp或全局MVC onException。

或者,您可以將異常封裝在新的異常中。例如,在postsharp你可以說這樣的事情

MyAspect : OnMethodBoundaryAspect { 

    public override OnException (MethodExecutionArgs args) { 
     ///your code to handle the exception here 
     throw new HandledExceptin(args.Exception); 
    } 
} 
+0

這樣做的原因是Postsharp給了我們一個更好的結果,現在被調用的方法的名稱術語和在獲得通過什麼樣的參數。既然現在有例外occuered在DataAccess層和由Postsharp處理我想要一些機制來貼近用戶關於一些異常發生。 –

+0

是否有任何理由爲什麼包裝異常不能解決您的使用案例? –