使用.NET 4.6.2中的HttpClientFactory

Tes*_*t45 20 dotnet-httpclient .net-core

我有一个.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.

Pan*_*vos 26

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

如果要与Polly一起使用,则需要添加Microsoft.Extensions.Http以使用HttpClientFactory和Microsoft.Extensions.Http.Polly

要配置HttpClientFactory,您必须将Microsoft.Extensions.DependencyInjection添加到"main"项目中.Microsoft.Extensions.Http包仅依赖于包含接口的Microsoft.Extensions.DependencyInjection.Abstractions,而不是DI提供程序本身.

  • 我的一些Web服务项目已经使用Ninject作为DI提供程序.是否可以在此场景中使用HttpClientFactory?在Ninject中使用HttpClientFactory还有其他机制吗?PS:我的Web服务不是.NET核心,而是使用.NET 4.7.* (4认同)
  • 在配置方面是否有任何示例代码? (4认同)

Jim*_*Jim 6

如@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);
     }
}
Run Code Online (Sandbox Code Playgroud)