ABP源碼分析三十六:ABP.Web.Api


這里的內容和ABP 動態webapi沒有關系。除了動態webapi,ABP必然是支持使用傳統的webApi。ABP.Web.Api模塊中實現了一些同意的基礎功能,以方便我們創建和使用asp.net webApi。

AbpApiController:這是一個抽象基類,繼承自ApiController,是AB WebApi系統中所有controller的基類。如下圖中,其封裝了ABP核心模塊中提供的大多數的功能對象。同時實現了一些公共的方法。它有四個派生類:DynamicApiController<T>,TypeScriptController,AbpCacheController,AbpServiceProxiesController。

 

 

 

ApiControllerConventionalRegistrar:所有AbpApiController的派生類都被register到ABP系統的容器中

 

HttpParameterBindingExtensions:HttpParameterBinding類的擴展方法,用於判斷方法參數是否從URI取值。

 

AbpApiAuthorizeAttribute:實現了IAbpAuthorizeAttribute,繼承ASP.NET 的AuthorizeAttribute。其封裝了Permissions和RequireAllPermissions用於配置權限,其重寫了IsAuthorized的方法用於實現ABP的授權校驗邏輯。

 

 

AbpRemoteCallException:繼承AbpException。用於封裝ABP webapi返回給客戶端(C#)的Exception.

IAbpWebApiClient:定義了訪問ABP webAPI的接口。

AbpWebApiClient:實現了IAbpWebApiClient中定義的訪問ABP webapi的方法。其內部通過封裝HttpClient來訪問webapi,然后根據遠程API的response返回相應的結果給客戶端。

 

 

以下兩個方法用於將CLR對象轉換為json對象,或者將Json對象轉換為CLR對象。這邊定義的將CLR對象轉換為Json對象方法似乎多余了,因為作者已經在ABP核心框架中定義了一個object的擴展方法將CLR對象轉換為Json對象。

 

AbpCacheController : 繼承自AbpApiController,用於清理緩存(clear 和 ClearAll)。

ClearAllCacheModel : 只有一個password 屬性。

ClearCacheModel:有一個password 屬性和一個待清空的cache's name數組

ClearCacheSettingProvider:注意清理緩存的方法會先檢驗密碼,清除緩存的密碼是以setting配置到ABP中的。ClearCacheSettingProvider為該設置提供了一個初始密碼,密碼是硬編碼到代碼中的,如下圖:

也就是你可以用這個密碼清空任何套用ABP模板開發的站點(沒有重新設置這個密碼)的緩存。這里建議你到web.config中重置這個密碼。

 

 

 

WrapResultAttribute:該特性用於標注webApi如何封裝response.比如WrapOnError表示將錯誤信息封裝到response返回到客戶端。LogError標識將錯誤信息log到日志中。

 

HttpActionDescriptorHelper:通過action的HttpActionDescriptor來獲取controller或action的WrapResultAttribute。

AbpExceptionFilterAttribute:繼承自ExceptionFilterAttribute,重寫OnException,以實現自定義的ExceptionFilter:根據action上標注的wrapResult來判斷是否要log或通過eventbus觸發事件

 

 

DynamicApiClientBuilder,IApiClientBuilder<TService>,ApiClientBuilder<TService>,DynamicApiClientBuilder:未實現,暫時忽略。

 

 

HttpVerbExtensions:HttpVerb的擴展方法,用於和httpmethod的比較。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM