AddHttpClient

 

在.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 请求的最佳实践之一。

  

posted on 2025-04-09 21:52  是水饺不是水饺  阅读(13)  评论(0)    收藏  举报

导航