在.NET Core中,`AddHttpClient` 是一个用于配置和管理 `HttpClient` 实例的扩展方法,它通过 `IHttpClientFactory`
提供高效、灵活且可扩展的方式来处理 HTTP 请求。以下是其主要用法和优势:
### 基本使用
1. **注册 IHttpClientFactory**
在 `Startup.cs` 文件的 `ConfigureServices` 方法中添加以下代码:
```csharp
services.AddHttpClient();
```
2. **注入并使用 HttpClient**
通过构造函数注入 `IHttpClientFactory`,然后在需要的地方创建 `HttpClient` 实例:
```csharp
public class BasicModel : PageModel
{
private readonly IHttpClientFactory _httpClientFactory;
public BasicModel(IHttpClientFactory httpClientFactory) => _httpClientFactory = httpClientFactory;
public async Task OnGet()
{
var client = _httpClientFactory.CreateClient();
// 使用 client 发送请求
}
}
```
### 高级功能
#### 命名客户端
适用于需要多种不同配置的场景。在 `ConfigureServices` 中预定义命名客户端:
```csharp
services.AddHttpClient("GitHub", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
client.DefaultRequestHeaders.Add("User-Agent", "HttpRequestsSample");
});
```
使用时只需指定名称即可获取预配置的客户端:
```csharp
var client = _httpClientFactory.CreateClient("GitHub");
```
#### 类型化客户端
将特定类型的客户端与自定义类关联,简化依赖注入:
```csharp
public class GitHubClient
{
private readonly HttpClient _client;
public GitHubClient(HttpClient httpClient)
{
httpClient.BaseAddress = new Uri("https://api.github.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
_client = httpClient;
}
public async Task<string> GetData() => await _client.GetStringAsync("/");
}
```
注册类型化客户端:
```csharp
services.AddHttpClient<GitHubClient>();
```
直接注入并使用:
```csharp
public class ValuesController : ControllerBase
{
private readonly GitHubClient _gitHubClient;
public ValuesController(GitHubClient gitHubClient) => _gitHubClient = gitHubClient;
[HttpGet]
public async Task<ActionResult> Get() => Ok(await _gitHubClient.GetData());
}
```
### 总结
`AddHttpClient` 和 `IHttpClientFactory` 的结合使用,不仅简化了 `HttpClient` 的管理,
还提供了强大的灵活性和扩展性,是 .NET Core 应用程序处理 HTTP 请求的最佳实践之一。