下面是我的 Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
和控制器:
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly HttpClient _httpClient;
private readonly IHttpClientFactory _httpClientFactory;
public TestController(HttpClient httpClient, IHttpClientFactory httpClientFactory)
{
_httpClient = httpClient;
_httpClientFactory = httpClientFactory;
}
[HttpGet]
[Route("getdata")]
public async Task GetData()
{
var baseAddress = "http://youtube.com";
var response = await _httpClient.GetAsync(baseAddress);
var client = _httpClientFactory.CreateClient();
response = await client.GetAsync(baseAddress);
}
}
如您所見,我可以通過HttpClient兩種方式獲得一個實體:
- 通過注射
HttpClient - 通過注入
IHttpClientFactory然后_httpClientFactory.CreateClient();
雖然我使用這兩種情況都得到了回應,但我的問題是它們之間有什么區別?什么時候使用哪一個?
uj5u.com熱心網友回復:
如果您只是發布單個請求。注入 httpclient 實體和使用 httpclientfactory 創建 httpclient 實體之間甚至沒有區別。
如果您使用httpclient的serval實體或重用httpclient發布多個請求,可能會出現一些問題,使用httpclient可以處理這些問題。您可以使用不同的網路設定創建 httpclients,如下所示:
在startup.cs中:
services.AddHttpClient("client_1", config =>
{
config.BaseAddress = new Uri("http://client_1.com");
config.DefaultRequestHeaders.Add("header_1", "header_1");
});
services.AddHttpClient("client_2", config =>
{
config.BaseAddress = new Uri("http://client_2.com");
config.DefaultRequestHeaders.Add("header_2", "header_2");
});
在控制器中:
var client1 = _httpClientFactory.CreateClient("client_1");
var client2 = _httpClientFactory.CreateClient("client_2");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444898.html
標籤:asp.net 核心 asp.net-core-webapi .net-5
