[英]How to register a Typed HttpClient in a ASP.NET Core 2.1 application
我試圖在我的ASP.NET 2.1 Web應用程序中注冊一個類型化HttpClient ,其中,該類型化HttpClient需要一個在構造函數中定義的API密鑰。
例如
Startup.cs
----------
services.AddHttpClient<MyHttpClient>();
MyHttpClient.cs
---------------
public class MyHttpClient(string apiKey, HttpClient httpClient) { .. }
如您所見,我非常確定IoC / DI不知道如何創建MyHttpClient
的實例,因為它不知道將什么值注入到string apiKey
參數中。
這可能嗎?
我也嘗試參考有關“基礎知識-Http請求(類型化的客戶端)”的Microsoft文檔,但是看不到任何此類示例。
注冊鍵入的客戶端時,可以在“啟動”中配置api密鑰
services.AddHttpClient<MyHttpClient>(c =>
{
c.DefaultRequestHeaders.Add("Authorization", "{apikey}");
});
對於指定客戶 ,布拉德的答案可能是唯一的解決方案。 但是對於類型化的客戶,您可以按照mjwills的建議注入密鑰。
在啟動時:
services.AddSingleton<IApiKeyProvider, ApiKeyProvider>();
其中ApiKeyProvider是:
public class ApiKeyProvider: IApiKeyProvider
{
public string ApiKey { get; set; }
}
並注入類型化的客戶端:
public class MyHttpClient
{
public HttpClient Client { get; }
public MyHttpClient(HttpClient client, IApiKeyProvider apiKeyProvider)
{
var key = apiKeyProvider.ApiKey;
}
}
或者,當密鑰存儲在配置中時,您可以使用IOptions。
在啟動時:
services.Configure<ApiSettings>(options => configuration.GetSection("ApiSettings").Bind(options));
其中ApiSettings是:
public class ApiSettings
{
public string ApiKey { get; set; }
}
並注入類型化的客戶端:
public class MyHttpClient
{
public HttpClient Client { get; }
public MyHttpClient(HttpClient client, IOptions<ApiSettings> apiSettings)
{
var key = apiSettings.Value.ApiKey;
}
}
以同樣的方式,你可以訪問請求的情況下,就像當你想讀取當前的access_token,在我的答案描述在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.