簡體   English   中英

如何在ASP.NET Core 2.1應用程序中注冊類型化HttpClient

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM