在控制台程序中使用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);
        }
    }
}

运行结果

posted @ 2022-04-08 21:01  .NET开发菜鸟  阅读(1913)  评论(2编辑  收藏  举报