国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.net Core 使用IHttpClientFactory請求實現(xiàn)

2024-07-10 12:49:43
字體:
供稿:網(wǎng)友

     導(dǎo)讀:本文已添加在 晨曦微服務(wù)之旅 ,現(xiàn)在自己在嘗試微服務(wù)架構(gòu),一邊學(xué)邊做項目快速的進入狀態(tài)。當然在學(xué)習(xí)的過程中會將自己學(xué)到的知識進行分享。

一、為什么不用HttpClient

        1.HttPClient使用完之后不會立即關(guān)閉開啟網(wǎng)絡(luò)連接時會占用底層socket資源,但在HttpClient調(diào)用其本身的Dispose方法時,并不能立刻釋放該資源

2.如果頻繁的使用HttpClient,頻繁的打開鏈接,關(guān)閉鏈接消耗就會很大。

二、解決方案

        1.我們可以延長HttpClient的生命周期,比如對其建一個靜態(tài)的對象

private static HttpClient Client = new HttpClient();

2.或者使用單例模式,至于你使用哪一種單例模式就看你自己了,這里就不細將了。因為這樣感覺起來不是很舒服

三、HttpClientFactory

        1.在.NET Core 2.1版本之后引入的 HttpClientFactory解決了HttpClient的所有痛點。有了 HttpClientFactory,我們不需要關(guān)心如何創(chuàng)建HttpClient,又如何釋放它。通過它可以創(chuàng)建具有特定業(yè)務(wù)的HttpClient,而且可以很友好的和 DI 容器結(jié)合使用,更為靈活。

2.HttpClientFactory 創(chuàng)建的HttpClient,也即是HttpClientHandler,只是這些個HttpClient被放到了“池子”中,工廠每次在create的時候會自動判斷是新建還是復(fù)用。(默認生命周期為2min,默認的生命周期可以修改)

  //修改默認的生命周期  services.AddHttpClient() .SetHandlerLifetime(TimeSpan.FromMinutes(5));

四、HttpClientFactory的使用

一、第一種使用方式

在Startup.cs中進行注冊

 //注冊http請求服務(wù) services.AddHttpClient();

2.Httphelper請求輔助類中使用

/// <summary>    /// 注入http請求    /// </summary>    private readonly IHttpClientFactory httpClientFactory;    public HttpHelp(IHttpClientFactory _httpClientFactory)    {      httpClientFactory = _httpClientFactory;    }    // <summary>    // Get請求數(shù)據(jù)    // <para>最終以url參數(shù)的方式提交</para>    // </summary>    // <param name="parameters">參數(shù)字典,可為空</param>    // <param name="requestUri">例如/api/Files/UploadFile</param>    // <returns></returns>    public async Task<string> Get(Dictionary<string, string> parameters, string requestUri, string token)    {      //從工廠獲取請求對象      var client = httpClientFactory.CreateClient();      //添加請求頭      if (!string.IsNullOrWhiteSpace(token))      {        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);      }      client.DefaultRequestHeaders.Add("Content-Type", "application/json; charset=utf-8");      //拼接地址      if (parameters != null)      {        var strParam = string.Join("&", parameters.Select(o => o.Key + "=" + o.Value));        requestUri = string.Concat(requestUri, '?', strParam);      }      client.BaseAddress = new Uri(requestUri);      return client.GetStringAsync(requestUri).Result;    }            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙井市| 大同市| 嘉义县| 南乐县| 泰安市| 韶山市| 泸溪县| 宁晋县| 禄劝| 休宁县| 石城县| 河曲县| 保德县| 成安县| 襄汾县| 铜川市| 文成县| 舞钢市| 廉江市| 双柏县| 运城市| 洱源县| 东光县| 柘荣县| 东平县| 隆林| 穆棱市| 望都县| 柳河县| 浙江省| 江源县| 南靖县| 沙雅县| 扎囊县| 墨江| 石林| 冀州市| 玉溪市| 苏尼特左旗| 华坪县| 沂源县|