IHttpClientFactory是.NET Core 2.1+推荐的HttpClient管理方式,解决new HttpClient导致的连接泄漏、DNS缓存不更新和SSL复用问题;它通过复用HttpMessageHandler提升性能与可靠性,并支持命名客户端、类型化客户端及Polly策略集成。

在C#中,IHttpClientFactory 是 .NET Core 2.1+ 推荐的创建和管理 HttpClient 实例的方式,它解决了直接 new HttpClient 带来的连接泄漏、DNS刷新不及时、配置复用难等问题。
为什么不能直接 new HttpClient?
每次 new HttpClient 都会创建新的底层 HttpClientHandler,而后者持有连接池和 DNS 缓存。频繁创建销毁会导致:
- Socket 耗尽(TIME_WAIT 状态堆积)
- DNS 变更无法及时生效(默认缓存 2 分钟)
- SSL/TLS 会话无法复用,影响性能
而 IHttpClientFactory 通过统一管理 HttpMessageHandler 生命周期(默认 2 分钟重用,支持自定义策略),让多个 HttpClient 实例共享底层资源。
注册和基础用法
在 Program.cs(.NET 6+)或 Startup.ConfigureServices 中注册:
builder.Services.AddHttpClient(); // 默认命名客户端
登录后复制
然后在服务中注入并使用:
public class WeatherService
{
private readonly IHttpClientFactory _factory;
public WeatherService(IHttpClientFactory factory) => _factory = factory;
public async Task<string> GetWeatherAsync()
{
var client = _factory.CreateClient(); // 创建轻量级 HttpClient 实例
return await client.GetStringAsync("https://api.example.com/weather");
}
}登录后复制
注意:CreateClient() 返回的是“逻辑客户端”,不是新连接——底层 handler 是复用的。
命名客户端与类型化客户端(推荐)
避免魔法字符串,用命名或类型化方式组织不同用途的客户端:
标签: js git json github app ssl ai dns nas c# .net 为什么
还木有评论哦,快来抢沙发吧~