91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WebApi client 的面向切面編程

發布時間:2020-06-19 22:27:02 來源:網絡 閱讀:358 作者:zddnd 欄目:網絡安全

.Net的面向切面編程

.Net的服務端應用AOP很常見,在Asp.net MVC與Asp.net WebApi等新框架里到處都有AOP的影子,我們可以把一個服務方法“切”為很多面,日志面、驗證面、請求方式處理、接口業務實現等多個面,有一些面可以使用過濾器特性(FilterAttribute)進行編寫,然后很方便和打上特性即可,對于一般的工程師,只需要專注實現接口業務實現。

在流行SOAP的年代,很少需要一個強悍的Client,而今天restful時代,.net也出了一個HttpClient,可以說是與Asp.net WebApi相配吧,雖然HttpClient相對WebClient在http接口請求有了質的變化,但相比服務端的webApi,AOP的影子都不見了。

 

讓HttpClient支持AOP

所謂讓HttpClient支持AOP,是指在對HttpClient進行組合封裝,基于HttpClient再打造一款客戶端框架,將AOP的理念引入到新客戶端框架來,我們可以簡單分析一下HttpClient請求一個接口要做的基本事情,同時把這些事情“切”為多個面,Http請求大致如下:

{Method} {Path}?query1={value1}&query2={value2}
{Header1}
{Header2}

{body}

我可以切出幾個面:

  1. method與path處理

  2. query參數處理

  3. 請求body內容處理

  4. 發送請求

  5. 回復結果處理

我們所做的框架,需要把1、2、3、5封裝為面,同時調用HttpClient來完成第4個動作。

 

AOP基礎框架的選擇

可以參考這個博客:NET AOP(一)七種AOP實現方法 

這里我選擇了Castle,Castle可以動態創建接口的實現類并實例化,可以對接口方法調用前進行攔截,并設置返回結果。

我們可以根據這個攔截功能,收集每個面的配置,組裝為http請求消息,然后調用HttpClient為完成發送請求,再讓第5個面來進行回復結果處理。基于Castle與HttpClient,我們就可以封裝出支持AOP的HttpClient新框架,這里命名為WebApiClient吧。

 

WebApiClient設計

現在,我們的目標是,讓調用WebApi與編寫WebApi一樣,聲明接口、參數、返回值,打上請求方法與路徑(面)特性、返回結果處理(面)特性、請求內容(面)特性。然后框架幫我們實現并取得實例,然后就可以調用這些接口了。

Step1:聲明接口

WebApi client 的面向切面編程

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);
    }
}

WebApi client 的面向切面編程

 

Step2:獲取接口實并調用

WebApi client 的面向切面編程

   myWebApi =  WebApiClient.HttpApiClient().GetHttpApi<MyWebApi> myWebApi.GetAboutAsync( myWebApi.UpdateUserAsync( UserInfo { UserName = , Password =  myWebApi.DeleteUser2Async(id:   Main(

WebApi client 的面向切面編程

 

WebApiClient更多的面

我們可以給框架增加更多的自定義面,比如日志記錄、返回結果統一驗證等等,這些就不一一介紹,但思想還是一樣的。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿鲁科尔沁旗| 凤冈县| 壶关县| 高雄市| 龙江县| 潢川县| 乳山市| 滁州市| 兴和县| 金堂县| 连城县| 洛南县| 义乌市| 宜丰县| 德钦县| 同心县| 柏乡县| 镇江市| 商城县| 金川县| 达州市| 灵山县| 梁山县| 汾阳市| 山西省| 泽普县| 雅安市| 宁津县| 焉耆| 炎陵县| 翁牛特旗| 府谷县| 东阳市| 类乌齐县| 察隅县| 庐江县| 科尔| 桐城市| 花垣县| 鸡泽县| 乌兰浩特市|