<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      .Net Core - AgileHttp

      2020年新年將至,先預祝.Net Core越來越好。
      做了這么多年一線開發,經常跟Http打交道。比如調用三方的Webservice,比如集成微信支付的時候服務端發起Prepay支付。特別是現在分布式、微服務大行其道,服務間通訊都離不開http調用。
      多年前也造過幾個http client的小輪子。這次使用C#強大的擴展方法進行了重構,使代碼看起來有那么一點流式編程的風格,再配合dynamic有點寫JavaScript的趕腳呢。今天拿出來分享給大家,為.Net Core的生態盡一點綿薄之力。
      Github: https://github.com/kklldog/AgileHttp 歡迎star 。

      安裝

      Install-Package AgileHttp

      示例

      使用HTTP.Send方法

      使用HTTP.Send / HTTP.SendAsync方法可以直接發送一個請求

      HTTP.Send("http://www.baidu.com") // 默認為Get方法 
      HTTP.Send("http://www.baidu.com", "POST")  
      HTTP.Send("http://www.baidu.com", "POST", new { name = "mjzhou" })  
      HTTP.Send("http://www.baidu.com", "POST", new { name = "mjzhou" }, new RequestOptions { ContentType = "application/json" }) 
      
      ResponseInfo response = HTTP.Send("http://localhost:5000/api/user/1");
      string content = response.GetResponseContent(); //獲取http響應返回值的文本內容
      

      HTTP.SendAsync方法是HTTP.Send方法的異步版本

      使用HttpClient類

      如果不喜歡手寫"GET","POST","PUT"等HTTP方法,可以是使用HttpClient類。HttpClient類內置了GET,POST,PUT,DELETE,OPTIONS幾個常用的方法。

      var client = new HttpClient("http://www.baidu.com");
      client.Get();//使用HttpClient發送Get請求
      
      var client = new HttpClient("http://www.baidu.com");
      client.Config(new RequestOptions { ContentType = "application/json" });
      client.Post(new { name = "mjzhou" }); //使用HttpClient發送Post請求
      
      ResponseInfo response = new HttpClient("http://localhost:5000/api/user/1").Get();
      string content = response.GetResponseContent(); //獲取http響應返回值的文本內容
      User user1 = new HttpClient("http://localhost:5000/api/user/1").Get<User>(); //泛型方法可以直接反序列化成對象。
      

      Get,Post等方法都有異步版本GetAsync,PostAsync

      使用擴展方法

      C#強大的擴展方法可以讓寫代碼行云流水。AgileHttp提供了幾個擴展方法,讓使用更人性化。

      var result = 
          "http://localhost:5000/api/user"
          .AppendQueryString("name", "kklldog")
          .AsHttpClient()
          .Get()
          .GetResponseContent();
      
      var user = 
          "http://localhost:5000/api/user"
          .AppendQueryString("name", "kklldog")
          .AsHttpClient()
          .Get<User>();
      
      1. String.AppendQueryString
        給一個字符串添加查詢參數
      "http://localhost:5000/api/user".AppendQueryString("name", "mjzhou") // 返回結果為"http://localhost:5000/api/user?name=mjzhou"
      
      1. String.AppendQueryStrings
        給一個字符串添加多個查詢參數
      var qs = new Dictionary<string, object>();
      qs.Add("a", "1");
      qs.Add("b", "2");
      "http://localhost:5000/api/user".AppendQueryStrings(qs) // 返回結果為"http://localhost:5000/api/user?a=1&b=2"
      
      1. String.AsHttp
        以當前字符串為URL創建一個HttpRequest
      "http://www.baidu.com".AsHttp().Send(); //默認為Get
      "http://localhost:5000/api/user".AsHttp("POST", new { name = "mjzhou" }).Send();
      
      1. String.AsHttpClient
        以當前字符串為URL創建一個HttpClient
      "http://www.baidu.com".AsHttpClient().Get();
      "http://localhost:5000/api/user".AsHttpClient().Post(new { name = "mjzhou" });
      
      1. ResponseInfo.Deserialize T
        ResponseInfo是請求結果的包裝類,使用Deserialize方法可以直接反序列化成對象。如果沒有配置RequestOptions則使用默認SerializeProvider。
      HTTP.Send("http://www.baidu.com").Deserialize<User>();
      

      RequestOptions

      使用RequestOptions可以對每個請求進行配置,比如設置ContentType,設置Headers,設置代理等等。

      屬性 說明
      SerializeProvider 獲取序列化器
      Encoding 獲取編碼方式
      Headers 獲取或設置HttpHeaders
      ContentType 獲取或設置Http ContentType屬性
      Host 獲取或設置Http Host屬性
      Connection 獲取或設置Http Connection屬性
      UserAgent 獲取或設置Http UserAgent屬性
      Accept 獲取或設置Http Accept屬性
      Referer 獲取或設置Http Referer屬性
      Certificate 獲取或設置X509證書信息
      Proxy 獲取或設置代理信息

      關于序列化/反序列化

      當你使用Post,Put(不限于這2個方法)方法提交一個對象的時候AgileHttp會自動就行序列化。使用泛型Get T, Post T方法會自動進行反序列化。默認使用JsonSerializeProvider來進行序列化及反序列化。JsonSerializeProvider使用著名的Newtonsoft.Json實現了ISerializeProvider接口,如果你喜歡你也可以自己實現自己的Provider,比如實現一個XMLSerializeProvider。

       public interface ISerializeProvider
        {
            T Deserialize<T>(string content);
            string Serialize(object obj);
        }
      

      AgileHttp提供2個地方來修改SerializeProvider:

      1. 通過RequestOptions為單個Http請求配置序列化器
      var xmlSerializeProvider = new xmlSerializeProvider();
      var client = new HttpClient("http://www.baidu.com");
      client.Config(new RequestOptions(xmlSerializeProvider));
      
      1. 通過HTTP.SetDefaultSerializeProvider(ISerializeProvider provider)更改全局默認序列化器
      var xmlSerializeProvider = new xmlSerializeProvider();
      HTTP.SetDefaultSerializeProvider(xmlSerializeProvider);
      

      注意!:如果提交的body參數的類型為String或者byte[]不會進行再次序列化。

      關注我的公眾號一起玩轉技術

      posted @ 2020-01-13 01:15  Agile.Zhou  閱讀(2128)  評論(9)    收藏  舉報
      主站蜘蛛池模板: 精品国产欧美一区二区五十路| 丰满高跟丝袜老熟女久久| 女高中生强奷系列在线播放| 平果县| av一区二区中文字幕| 中文字幕av日韩有码| 人妻少妇邻居少妇好多水在线 | 精品国产精品国产偷麻豆| 在线国产精品中文字幕| 贵州省| 十八禁日本一区二区三区| 乱女乱妇熟女熟妇综合网| 无码日韩做暖暖大全免费不卡| 欧美成人精品三级网站| 亚洲男人AV天堂午夜在| 九九热在线免费观看视频| 一区二区三区激情都市| 图片| 国产精品污双胞胎在线观看| 99九九成人免费视频精品| 精品国产一区av天美传媒| 精品久久精品午夜精品久久| 中文字幕久久久久人妻| 亚洲欧美激情在线一区| 国产亚洲精品久久综合阿香| 日韩精品一区二区蜜臀av| 国产午夜亚洲精品久久| 人人爽天天碰天天躁夜夜躁| 国产不卡av一区二区| 亚洲中文字幕无码久久精品1| 尤溪县| 亚洲一区二区三区| 欧美日本中文| 韩日午夜在线资源一区二区| 亚欧美闷骚院| 挺进粗大尤物人妻中文字幕| 亚洲二区中文字幕在线| 中文字幕第一页亚洲精品| 婷婷精品国产亚洲av在线观看| 精品国产中文字幕av| 国产精品黄色片在线观看|