另一个常见的需求是根据不同的服务接口创建不同的HttpClient实例。为了实现这一点,ASP.NET Core提供了Typed HttpClient的支持。
下面是使用Typed HttpClient的示例代码:
public interface IExampleService
{Task<string> GetData();
}public class ExampleService : IExampleService
{private readonly HttpClient _httpClient;public ExampleService(HttpClient httpClient){_httpClient = httpClient;}public async Task<string> GetData(){HttpResponseMessage response = await _httpClient.GetAsync("");response.EnsureSuccessStatusCode();return await response.Content.ReadAsStringAsync();}
}
配置依赖注入:
builder.Services.AddHttpClient<IExampleService, ExampleService>(client =>
{client.BaseAddress = new Uri("https://www.baidu.com/");
});
在控制器中注入IExampleService:
private readonly ILogger<WeatherForecastController> _logger;
private readonly IHttpClientFactory _httpClientFactory;
private readonly IExampleService _exampleService;public WeatherForecastController(ILogger<WeatherForecastController> logger, IHttpClientFactory httpClientFactory, IExampleService exampleService)
{_logger = logger;_httpClientFactory = httpClientFactory;_exampleService = exampleService;
}
在上面的示例中,我们首先定义了一个IExampleService接口,该接口定义了与外部服务交互的方法。然后,我们实现了ExampleService类,并在构造函数中注入了HttpClient实例。
最后,我们使用AddHttpClient方法的另一个重载版本,并通过泛型参数指定了服务接口和实现类的关联关系。在配置HttpClient的回调中,我们可以进行相应的配置,如设置BaseAddress等