ASP.NET Core依赖注入添加多个HttpClient

Mak*_*dip 4 c# dependency-injection httpclient asp.net-core

services.AddHttpClient("Name", client =>
    {
        client.DefaultRequestHeaders.AcceptLanguage.Clear();
        client.BaseAddress = new Uri('BaseUrl');
    })
    .AddAuthenticationHandler(config).Services
    .AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
        .CreateClient('ClientName'));
Run Code Online (Sandbox Code Playgroud)
public partial class StudentClient : IStudentClient
{
    private System.Net.Http.HttpClient _httpClient;

    public UsersClient(System.Net.Http.HttpClient httpClient)
    {
        _httpClient = httpClient;
    }
} 
Run Code Online (Sandbox Code Playgroud)

现在我已经给出了使用 HttpClient 访问服务的代码。现在的问题是我有多个基本 URL 来调用不同的服务,我也需要对其进行配置。那么我该如何实施呢?

Dim*_*kos 8

您可以有多个命名的 http 客户端:

services.AddHttpClient("Name", client =>
{
    client.DefaultRequestHeaders.AcceptLanguage.Clear();
    client.BaseAddress = new Uri('BaseUrl');
});

services.AddHttpClient("GitHub", client =>
{
    client.BaseAddress = new Uri("https://api.github.com/");
});
Run Code Online (Sandbox Code Playgroud)

使用以下方式访问特定客户端IHttpClientFactory

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private readonly IHttpClientFactory _httpClientFactory;

    public WeatherForecastController(IHttpClientFactory httpClientFactory)
    {
        _httpClientFactory = httpClientFactory;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        var httpClient = _httpClientFactory.CreateClient("GitHub");
        
        // use the http client to fetch data
    }
}
Run Code Online (Sandbox Code Playgroud)

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-6.0#named-clients