.Net的服務(wù)端應(yīng)用AOP很常見,在Asp.net MVC與Asp.net WebApi等新框架里到處都有AOP的影子,我們可以把一個(gè)服務(wù)方法“切”為很多面,日志面、驗(yàn)證面、請(qǐng)求方式處理、接口業(yè)務(wù)實(shí)現(xiàn)等多個(gè)面,有一些面可以使用過濾器特性(FilterAttribute)進(jìn)行編寫,然后很方便和打上特性即可,對(duì)于一般的工程師,只需要專注實(shí)現(xiàn)接口業(yè)務(wù)實(shí)現(xiàn)。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出贊皇免費(fèi)做網(wǎng)站回饋大家。
在流行SOAP的年代,很少需要一個(gè)強(qiáng)悍的Client,而今天restful時(shí)代,.net也出了一個(gè)HttpClient,可以說是與Asp.net WebApi相配吧,雖然HttpClient相對(duì)WebClient在http接口請(qǐng)求有了質(zhì)的變化,但相比服務(wù)端的webApi,AOP的影子都不見了。
所謂讓HttpClient支持AOP,是指在對(duì)HttpClient進(jìn)行組合封裝,基于HttpClient再打造一款客戶端框架,將AOP的理念引入到新客戶端框架來,我們可以簡(jiǎn)單分析一下HttpClient請(qǐng)求一個(gè)接口要做的基本事情,同時(shí)把這些事情“切”為多個(gè)面,Http請(qǐng)求大致如下:
{Method} {Path}?query1={value1}&query2={value2} {Header1} {Header2} {body}
我可以切出幾個(gè)面:
method與path處理
query參數(shù)處理
請(qǐng)求body內(nèi)容處理
發(fā)送請(qǐng)求
回復(fù)結(jié)果處理
我們所做的框架,需要把1、2、3、5封裝為面,同時(shí)調(diào)用HttpClient來完成第4個(gè)動(dòng)作。
可以參考這個(gè)博客:NET AOP(一)七種AOP實(shí)現(xiàn)方法
這里我選擇了Castle,Castle可以動(dòng)態(tài)創(chuàng)建接口的實(shí)現(xiàn)類并實(shí)例化,可以對(duì)接口方法調(diào)用前進(jìn)行攔截,并設(shè)置返回結(jié)果。
我們可以根據(jù)這個(gè)攔截功能,收集每個(gè)面的配置,組裝為http請(qǐng)求消息,然后調(diào)用HttpClient為完成發(fā)送請(qǐng)求,再讓第5個(gè)面來進(jìn)行回復(fù)結(jié)果處理?;贑astle與HttpClient,我們就可以封裝出支持AOP的HttpClient新框架,這里命名為WebApiClient吧。
現(xiàn)在,我們的目標(biāo)是,讓調(diào)用WebApi與編寫WebApi一樣,聲明接口、參數(shù)、返回值,打上請(qǐng)求方法與路徑(面)特性、返回結(jié)果處理(面)特性、請(qǐng)求內(nèi)容(面)特性。然后框架幫我們實(shí)現(xiàn)并取得實(shí)例,然后就可以調(diào)用這些接口了。
Step1:聲明接口
namespace Demo { [JsonReturn] [HttpHost("http://www.mywebapi.com")] public interface MyWebApi { [HttpGet("/webapi/{type}/about")] // GET webapi/typeValue/about Task<ApiResult<string>> GetAboutAsync(string type); [HttpGet("/webapi/user")] // GET webapi/user?userName=aa&nickName=bb&&BeginTime=cc&EndTime=dd Task<ApiResult<UserInfo>> GetUserAsync(string userName, string nickName, TimeFilter timeFilter); [HttpPut("/webapi/user")] // PUT webapi/user Task<ApiResult<bool>> UpdateUserAsync([JsonContent] UserInfo loginInfo); [HttpDelete("/webapi/user")] // DELETE webapi/user?id=idValue Task<ApiResult<bool>> DeleteUserAsync(string id); [HttpDelete("/webapi/user/{id}")] // DELETE webapi/user/idValue Task<ApiResult<bool>> DeleteUser2Async(string id); } }
Step2:獲取接口實(shí)并調(diào)用
myWebApi = WebApiClient.HttpApiClient().GetHttpApi<MyWebApi> myWebApi.GetAboutAsync( myWebApi.UpdateUserAsync( UserInfo { UserName = , Password = myWebApi.DeleteUser2Async(id: Main(
我們可以給框架增加更多的自定義面,比如日志記錄、返回結(jié)果統(tǒng)一驗(yàn)證等等,這些就不一一介紹,但思想還是一樣的。
當(dāng)前名稱:WebApiclient的面向切面編程
分享地址:http://chinadenli.net/article6/gicoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、定制開發(fā)、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、網(wǎng)站導(dǎo)航、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)