Asp.net Core, 在我用過的多種Http REST 客戶端:
中,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