• 使用 .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代码,大家可以参考一下

    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 会被复用,只要你使用同一个工厂实例,这是这里的重要部分。
    •  

    改:

    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);
         }
    }
    

      

      

     
  • 相关阅读:
    学用 TStringGrid [8] 字体列表
    学用 TStringGrid [6] Options
    学用 TStringGrid [5] FixedCols、FixedRows、Color、FixedColor
    学用 TStringGrid [4] ColWidths、RowHeights
    Delphi 的字符及字符串[6] Char(AnsiChar)、WideChar 与其编码的相互转换
    学用 TStringGrid [2] DefaultColWidth、DefaultRowHeight、Col、Row
    学用 TStringGrid [3] Cols、Rows
    动画演示 Delphi 2007 IDE 功能[5] 虚拟屏幕
    js string format
    jquery select(列表)的操作(取值/赋值)
  • 原文地址:https://www.cnblogs.com/94cool/p/16590500.html
Copyright © 2020-2023  润新知