使用 .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);
     }
}

  

  

 
posted @   94cool  阅读(217)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需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" 索引超出范围。必须为非负值并小于集合大小]解决方法
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示