Как зарегистрировать типизированный HttpClient в приложении ASP.NET Core 2.1 - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь зарегистрировать типизированный HttpClient в моем веб-приложении ASP.NET 2.1, где для типизированного HttpClient требуется ключ API, определенный в конструкторе.

например,

Startup.cs
----------
services.AddHttpClient<MyHttpClient>();


MyHttpClient.cs
---------------
public class MyHttpClient(string apiKey, HttpClient httpClient) { .. }

Как вы можете видеть, я почти уверен, что IoC / DI не будет знать, как создать экземпляр MyHttpClient, потому что он не будет знать, какое значение ввести в параметр string apiKey.

Возможно ли это?

Я также пытался ссылаться на документы Microsoft по поводу "Основы - запросы Http (типизированные клиенты)" * , но не смог увидеть ни одного примера.этого.

Ответы [ 2 ]

0 голосов
/ 27 июля 2018

Для именованных клиентов ответ Брэда может быть единственным решением.Но для типизированных клиентов вы можете ввести ключ в соответствии с предложением 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,как описано в моем ответе здесь .

0 голосов
/ 08 июня 2018

Вы можете настроить свой ключ API в Startup при регистрации набранного клиента

services.AddHttpClient<MyHttpClient>(c => 
{ 
    c.DefaultRequestHeaders.Add("Authorization", "{apikey}"); 
});
...