使用 .NET 4.6.2 中的 HttpClientFactory(Use HttpClientFactory from .NET 4.6.2)
有一个 .NET 4.6.2 控制台应用程序(使用 Simple Injector)。我需要调用 HTTP 服务。直接使用 HttpClient 遇到问题后,我尝试改用 HttpClientFactory (https://github.com/aspnet/HttpClientFactory)。
项目/库是 .NET Standard 2.0 所以应该吗?在 .NET 4.6.2 中工作,但它使用 IServiceCollection 之类的东西,它只在 Core 中。
所以我的问题是我可以在非核心应用程序中使用 HttpClientFactory。
您需要添加 Microsoft.Extensions.Http 和 Microsoft.Extensions.DependencyInjection。这是我的ConsoleApp代码,大家可以参考一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Program { static void Main( string [] args) { Test(); Console.Read(); } static async void Test() { var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider(); var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>(); var client = httpClientFactory.CreateClient(); var response = await client.SendAsync( new HttpRequestMessage(HttpMethod.Get, "http://www.baidu.com" )); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content); } } |
【问题】:
-
如果循环 Test(),它会创建多个客户端实例
-
是的,但是如果您在此方法之外注册 serviceProvider,那么每个
var client = httpClientFactory.CreateClient();
都会返回相同的客户端 -
HttpClient 可以创建多次也没关系。 HttpMessageHandler 会被复用,只要你使用同一个工厂实例,这是这里的重要部分。
-
改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Program { static IHttpClientFactory httpClientFactory ; static void Main( string [] args) { var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider(); httpClientFactory = serviceProvider.GetService<IHttpClientFactory>(); Test(); Console.Read(); } static async void Test() { var client = httpClientFactory.CreateClient(); var response = await client.SendAsync( new HttpRequestMessage(HttpMethod.Get, "http://www.baidu.com" )); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-08-16 cmpp短信网关对接MSGID问题
2016-08-16 TFS命令tf:undo(强制签入签出文件)
2012-08-16 AsParallel \AsQueryable<T>().ToList() [System.ArgumentOutOfRangeException was unhandled" 索引超出范围。必须为非负值并小于集合大小]解决方法