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 来调用不同的服务,我也需要对其进行配置。那么我该如何实施呢?
您可以有多个命名的 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)