日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】ABP源码分析三十六:ABP.Web.Api

發(fā)布時(shí)間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ABP源码分析三十六:ABP.Web.Api 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這里的內(nèi)容和ABP 動(dòng)態(tài)webapi沒有關(guān)系。除了動(dòng)態(tài)webapi,ABP必然是支持使用傳統(tǒng)的webApi。ABP.Web.Api模塊中實(shí)現(xiàn)了一些同意的基礎(chǔ)功能,以方便我們創(chuàng)建和使用asp.net webApi。

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

?

?

?

ApiControllerConventionalRegistrar:所有AbpApiController的派生類都被register到ABP系統(tǒng)的容器中

?

HttpParameterBindingExtensions:HttpParameterBinding類的擴(kuò)展方法,用于判斷方法參數(shù)是否從URI取值。

?

AbpApiAuthorizeAttribute:實(shí)現(xiàn)了IAbpAuthorizeAttribute,繼承ASP.NET 的AuthorizeAttribute。其封裝了Permissions和RequireAllPermissions用于配置權(quán)限,其重寫了IsAuthorized的方法用于實(shí)現(xiàn)ABP的授權(quán)校驗(yàn)邏輯。

?

?

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

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

AbpWebApiClient:實(shí)現(xiàn)了IAbpWebApiClient中定義的訪問ABP webapi的方法。其內(nèi)部通過封裝HttpClient來訪問webapi,然后根據(jù)遠(yuǎn)程API的response返回相應(yīng)的結(jié)果給客戶端。

?

?

以下兩個(gè)方法用于將CLR對(duì)象轉(zhuǎn)換為json對(duì)象,或者將Json對(duì)象轉(zhuǎn)換為CLR對(duì)象。這邊定義的將CLR對(duì)象轉(zhuǎn)換為Json對(duì)象方法似乎多余了,因?yàn)樽髡咭呀?jīng)在ABP核心框架中定義了一個(gè)object的擴(kuò)展方法將CLR對(duì)象轉(zhuǎn)換為Json對(duì)象。

?

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

ClearAllCacheModel?: 只有一個(gè)password 屬性。

ClearCacheModel:有一個(gè)password 屬性和一個(gè)待清空的cache's name數(shù)組

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

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

?

?

?

WrapResultAttribute:該特性用于標(biāo)注webApi如何封裝response.比如WrapOnError表示將錯(cuò)誤信息封裝到response返回到客戶端。LogError標(biāo)識(shí)將錯(cuò)誤信息log到日志中。

?

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

AbpExceptionFilterAttribute:繼承自ExceptionFilterAttribute,重寫OnException,以實(shí)現(xiàn)自定義的ExceptionFilter:根據(jù)action上標(biāo)注的wrapResult來判斷是否要log或通過eventbus觸發(fā)事件

?

?

DynamicApiClientBuilder,IApiClientBuilder<TService>,ApiClientBuilder<TService>,DynamicApiClientBuilder:未實(shí)現(xiàn),暫時(shí)忽略。

?

?

HttpVerbExtensions:HttpVerb的擴(kuò)展方法,用于和httpmethod的比較。

?

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

你好,看到這我有一點(diǎn)疑問,我看到abp在添加各種攔截器的時(shí)候,這其中包括 uow攔截器、參數(shù)驗(yàn)證,等 ,開始感覺很一般的操作,之后我做了一個(gè)例子 寫了一個(gè)普通的方法并在上邊 添加 UnitOfWorkAttribute 的時(shí)候,發(fā)現(xiàn)沒有被識(shí)別為一個(gè)工作單元 ,而這個(gè)方法的簽名是 private ,接著我又測(cè)試 public 都不會(huì)成為一個(gè)工作單元 ,在測(cè)試 public virtual 的時(shí)候 就可以了。。
那么問題來了:所有的IApplicationService 服務(wù)的組件 里邊的方法都沒有 virtual 為什么可以被攔截 ?
求大神解惑~~

我知道了 ~~~~
public virtual method or interface method ~~~
thank u ~

總結(jié)

以上是生活随笔為你收集整理的【转】ABP源码分析三十六:ABP.Web.Api的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。