Asp.net Core Flurl.Http 結合IHttpClientFactory管理HttpClient生命周期


Asp.net Core, 在我用過的多種Http REST 客戶端:

RestSharp

WebApiClient

Refit

Flurl

中,Flurl可以說是最符合我口味的,用起來那可真的順滑無比。

不過它因為出現的比較早,並沒有使用asp.net core中的IHttpClientFactory 管理HttpClient實例,而是自己管理。一般是根據host來緩存一個HttpClient實例,比如你請求所有的https://www.baidu.com/ 都用一個緩存的實例,這樣可能會有些問題,比如Dns更新等;

對於我們有着用IHttpClientFactory的執念,Flurl也是支持的:

簡單寫法

注入HttpClient

public void ConfigureServices(IServiceCollection services)
{
	 //...

	services.AddHttpClient();

	//...
}

使用

private readonly IFlurlClient _flurlClient;

public CommonController(IHttpClientFactory httpClientFactory)
{
	_flurlClient = new FlurlClient(httpClientFactory.CreateClient());
}

實戰用法

添加api業務實體類

    public class TestFlurlHttpClient
    {
        private readonly IFlurlClient _flurlClient;

        public TestFlurlHttpClient(HttpClient httpClient)
        {
            _flurlClient = new FlurlClient(httpClient);
        }

        public async Task<PassportUserModel> GetUserByPid(int pid)
        {
            var result = await _flurlClient.Request($"api/v1/member/user/getbypid?pid={pid}").GetJsonAsync<PassportApiResult<PassportUserModel>>();
            return result.Data;
        }
    }

注入HttpClient

public void ConfigureServices(IServiceCollection services)
{
   //...

     services.AddHttpClient<TestFlurlHttpClient>("memberclient", c =>
     {
    	 c.BaseAddress = new System.Uri("http://172.16.3.119:5001/");
     });
     
     //或
     //services.AddHttpClient<ITestFlurlHttpClient,TestFlurlHttpClient>("memberclient", c =>
     //{
    	// c.BaseAddress = new System.Uri("http://172.16.3.119:5001/");
     //});

  //...
}

使用

private readonly TestFlurlHttpClient _testFlurlHttpClient;

public CommonController(TestFlurlHttpClient testFlurlHttpClient)
{
    _testFlurlHttpClient = testFlurlHttpClient;
}

如絲順滑,誰用誰知道;

了解更多還是看文檔吧 : https://flurl.dev/docs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM