ABP源碼分析四十七:ABP中的異常處理

ABP 中異常處理的思路是很清晰的。一共五種類型的異常類。html

AbpInitializationException用於封裝ABP初始化過程當中出現的異常,只要拋出AbpInitializationException異常就能夠,無須作額外處理。這類異常每每是須要維護人員介入分析的。ajax

其餘四個異常都在AbpController中被集中處理,處理分爲兩步:一,經過EventBus觸發異常事件,相應的異常處理函數則處理異常。二,針對AbpValidationException,UserFriendlyException和AbpAuthorizationException異常,Abp會將異常信息轉換爲ErrorInfo,並以view或Json的形式返回給客戶端。json

 

AbpException: Abp中全部自定義的異常類的基類。函數

 

UserFriendlyException:繼承自AbpException類, 實現了IHasLogSeverity接口。用戶能夠經過UserFriendlyException的實例來封裝須要返回給客戶端的異常。源碼分析

 

 

實際使用UserFriendlyException的樣例以下ui

 

IExceptionToErrorInfoConverter:定義了將Exception轉換爲ErrorInfo的方法。同時定義了一個指向自生的對象Next, 做者的用意應該是企圖以職責鏈的模式構建一個ExceptionToErrorInfoConverter實例的鏈,其中每一個實例用於轉換一個類型的Exception到ErrorInfo。不過目前而言,ABP中並無如此實現這個功能,而是將全部的功能都塞到了一個DefaultErrorInfoConverter類中。spa

 

DefaultErrorInfoConverter:實現了將AbpValidationException,UserFriendlyException和AbpAuthorizationException實例將Exception轉換爲ErrorInfo3d

 

 

IErrorInfoBuilder:定義了構建IExceptionToErrorInfoConverter職責鏈的方法和將Exception轉換爲ErrorInfo實例的方法。htm

 

ErrorInfoBuilder:實現了接口IErrorInfoBuilder中定義的方法。經過構建DefaultErrorInfoConverter實例,並調用該實例完成Exception到ErrorInfo的轉換。對象

 

AbpController:重寫OnException方法來集中處理AbpValidationException,UserFriendlyException和AbpAuthorizationException異常的地方。注意ABP中沒有處理AbpInitializationException異常的地方,若是出現了AbpInitializationException的異常,系統會自動終止。

 

 

 

 

MvcAjaxResponse<TResult>,MvcAjaxResponse:用於封裝針對ajax requests的Response信息。繼承自AjaxResponse<TResult>,添加了一個TargetUrl屬性,沒有重寫基類中的方法。

 

AbpJsonResult:繼承自Newtonsoft的JsonResult。用於將CLR對象序列化爲CamelCase的json 對象。

 

自定義的異常事件處理函數

 

返回ABP源碼分析系列文章目錄

相關文章
相關標籤/搜索