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

project/library 是 .NET Standard 2.0,所以它应该是??在 .NET 4.6.2 中工作,但它使用像 IServiceCollection 这样的东西,它只在核心中。

所以我的问题是我可以在非核心应用程序中使用 HttpClientFactory。

所有 Microsoft.Extensions.* 包都以 .NET Standard 2.0 为目标。这意味着如果您将适当的包添加到您的应用程序,您可以使用依赖注入、配置、日志记录 HttpClientFactory。

您需要添加Microsoft.Extensions.Http to use HttpClientFactory and Microsoft.Extensions.Http.Polly if you want to use it with Polly

要配置 HttpClientFactory,您必须添加包含接口的 Microsoft.Extensions.DependencyInjection to your "main" project. Microsoft.Extensions.Http package only depends on Microsoft.Extensions.DependencyInjection.Abstractions,而不是 DI 提供程序本身。

正如@Panagiotis Kanavos 所说,您需要添加 Microsoft.Extensions.HttpMicrosoft.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);
     }
}