在新的 ASP.NET Core 2.1中有一个非常酷的IHttpClientFactory
功能 https://www.hanselman.com/blog/HttpClientFactoryForTypedHttpClientInstancesInASPNETCore21.aspx
我正在尝试在我的 ASP.NET Core 2.1 预览版-2 应用程序中使用此功能,但我需要在 .NET Standard 2.0 中的类库中使用该HttpClient
在Startup.cs
中执行AddHttpClient
ConfigureServices()
后,如何将此HttpClientFactory
或特定的命名HttpClient
传递给我在 .NET Standard 2.0 类库中创建的 API 客户端?这个客户端几乎可以处理我对第三方的所有 API 调用。
基本上,我只是想将特定的命名HttpClient
放入我的thirdPartyApiClient
中。
这是我在ConfigureServices()
的代码:
public void ConfigureServices(IServiceCollection services)
{
// Create HttpClient's
services.AddHttpClient("Api123Client", client =>
{
client.BaseAddress = new Uri("https://api123.com/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
});
services.AddHttpClient("Api4567Client", client =>
{
client.BaseAddress = new Uri("https://api4567.com/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
});
}
现在有一个NuGet包Microsoft.Extensions.Http
提供IHttpClientFactory到.NET Standard 2.0
首先,库类的构造函数应该采用HttpClient
参数,以便您可以向其注入HttpClient
。然后,最简单的方法(在链接文章中也提到了它的价值)是简单地为该库类添加一个特定的HttpClient
:
services.AddHttpClient<MyLibraryClass>(...);
然后,当然,注册库类进行注入,如果您还没有:
services.AddScoped<MyLibraryClass>();
然后,当您的库类被实例化以注入到某些东西中时,它也将被注入您为其指定的HttpClient
。
或者,您可以手动指定要通过以下方式注入的HttpClient
实例:
services.AddScoped(p => {
var httpClientFactory = p.GetRequiredService<IHttpClientFactory>();
return new MyLibraryClass(httpClientFactory.Create("Foo"));
});