• 在控制台程序中使用IHttpClientFactory


    一、前言

    一般来说我们发送Web请求的时候,都是通过HttpClient。但是使用的时候会有两个问题:

    1. 因为HttpClient实现了IDisposable接口,每次使用如果都new一个对象的话,最后会耗尽你的主机端口。微软建议使用单例模式。
    2. 如果使用单例模式的话,端口是节省了,但是请求地址的DNS如果改变了的话,这个单例并不知道。

    为了解决上面的两个问题,社区就出现了HttpClientFactory的开源方案。现在微软也将其添加到了. net core中。并且基于. net standard 2.0。

    如果是在.Net Core的web项目中,我们可以直接在ConfigureServices方法中配置使用

    services.AddHttpClient();

    那么在控制台项目中如何使用呢。在.net framework和.net core的控制台中都可以使用, 但是要求你的 .net framework版本至少为4.6.1.

    二、示例代码

    添加一个控制台项目,并nuget上安装下面两个包:Microsoft.Extensions.Http和Microsoft.Extensions.DependencyInjection。

    using Microsoft.Extensions.DependencyInjection;
    using System;
    using System.Net.Http;
    
    namespace HttpClientFactoryTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Test();
                Console.ReadKey();
            }
    
            static async void Test()
            {
                var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
                var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
                var client = httpClientFactory.CreateClient();
                var response = await client.GetAsync("http://www.baidu.com");
                var content = await response.Content.ReadAsStringAsync();
                Console.WriteLine(content);
            }
        }
    }

    运行结果

  • 相关阅读:
    android利用ContentResolver访问者获取手机联系人信息
    Retrofit 实现获取往里圆角图片,且传值到另一个页面
    Android简单计时器
    几个比较常用的jar包
    Android双击Home键返回桌面
    两层fragment嵌套时出现空白,(收藏别人的)
    自动轮播本地图片触摸暂停轮播
    Fragment中TabLayout加FragmentViewPager
    Android 删除已知路径的文件或文件夹
    树莓派开机后获取正确时间
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/16119737.html
Copyright © 2020-2023  润新知