从.NET 4.6.2使用HttpClientFactory

时间:2018-07-24 12:41:13

标签: .net-core dotnet-httpclient

我有一个.NET 4.6.2控制台应用程序(使用简单注入器)。我需要拨打HTTP服务。直接使用HttpClient遇到问题后,我正尝试使用HttpClientFactory(https://github.com/aspnet/HttpClientFactory)。

该项目/库是.NET Standard 2.0,所以应该??可以在.NET 4.6.2中使用,但它使用IServiceCollection之类的东西,仅在Core中。

所以我的问题是我可以在非Core应用程序中使用HttpClientFactory吗?

2 个答案:

答案 0 :(得分:16)

所有Microsoft.Extensions。*软件包都针对.NET Standard 2.0。这意味着,如果将适当的包添加到应用程序中,则可以使用依赖注入,配置,记录 HttpClientFactory。

您需要添加Microsoft.Extensions.Http才能使用HttpClientFactory,如果要与Microsoft.Extensions.Http.Polly一起使用,请添加Polly

要配置HttpClientFactory,您必须将Microsoft.Extensions.DependencyInjection添加到“主”项目中。 Microsoft.Extensions.Http包仅取决于包含接口的Microsoft.Extensions.DependencyInjection.Abstractions,而不取决于DI提供程序本身。

答案 1 :(得分:3)

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