[.NET] 控制流程,不使用例外中斷流程控制的寫法

Exception 是微軟預設中斷流程的手段,要控制好流程就要好好的處理例外,也就是寫 try catch,這會讓流程控制的程式碼看起來很凌亂。於是我需要幾個原則

  1. 被流程所呼叫的方法都要處理好 Exception/錯誤(根據需求場景,例如:找不到某個資料) 並回傳 Failure 物件
  2. 若有攔截到 Exception,Failure 物件要裝載 Exception 訊息,並且給予該例外正確的錯誤訊息。
  3. 盡量在最外層紀錄 Failure 日誌,例如,Controller、Application Layer
  4. Web API 回傳值不可以包含 Exception

以上是我的原則,在你的團隊裡面應該也有自己的錯誤處理機制;接下來,我用 ASP.NET Core Web API 實際的演練一遍

...繼續閱讀 »

[ASP.NET Web API 2] Global Error Handler - 實作 ExceptionFilterAttribute 捕捉應用程式例外並紀錄請求參數

Global Error Handler 有很多的方式,這次來介紹 System.Web.Http.Filters.ExceptionFilterAttribute,用它集中管理應用程式的例外,不需要在每一個動作包裝錯誤,你可以針對不同的例外進行處理,比如,有專門的 Filter 處理交易例外

...繼續閱讀 »

[ASP.NET Web API 2]如何使用 OWIN Middleware 捕捉 OWIN Host 引發的例外

Web API 的 ExceptionFilterAttribute、IExceptionFilter 能幫我們處理應用程式等級的例外,但無法處理載體 (Host) 的例外,當使用 IIS 作為載體,假使發生未處理的例外時會出現黃頁,OWIN 作為載體時,ExceptionFilterAttribute、IExceptionFilter 卻攔截不到錯誤,此時應該改用 Microsoft.Owin.Diagnostics.IAppBuilder.UseErrorPage 擴充方法,接下來將會利用 Error Handler 這個情境,介紹 OWIN Middleware 的幾種使用方式。

...繼續閱讀 »

[ASP.NET MVC] Global Error Handler - 實作 HandleErrorAttribute 捕捉應用程式例外並紀錄請求參數

有朋友問我,不想每個 Action 寫 try catch,怎麼在 Global ErrorHandler 紀錄相關參數,來,看看我怎麼做,以下將實作 HandleErrorAttribute

PS.若你的例外需要跟用戶互動,以下實作可能不適合

PS.無法捕捉IIS的例外,需要使用Elmah

...繼續閱讀 »