Установка заголовков запросов на запрос с помощью IHttpClientFactory - PullRequest
0 голосов
/ 24 сентября 2018

Я использую типизированные клиенты с IHttpClientFactory.Вот так:

// Startup.cs
services.AddHttpClient<MyHttpClient>()

// MyHttpClient.cs
public class MyHttpClient
{
    public MyHttpClient(HttpClient client)
    {
        Client = client;
    }

    public HttpClient Client { get; }
}

// MyService.cs
public class MyService {
    public MyService(MyHttpClient httpClient) {}

    public async Task SendRequestAsync(string uri, string accessToken) {
        _httpClient.Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        await _httpClient.Client.GetAsync(uri);
    }
}

Я не уверен, как это работает.Заголовки запроса будут установлены только для этого запроса или для каждого последующего запроса, который делается с использованием этого экземпляра httpClient.Как установить заголовок для каждого запроса?

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать DelegatingHandler для добавления заголовка к каждому запросу, * HttpClient.

public class HeaderHandler: DelegatingHandler
{
    public HeaderHandler()
    {
    }
    public HeaderHandler(DelegatingHandler innerHandler): base(innerHandler)
    {
    }

    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        request.Headers.Add("CUSTOM-HEADER","CUSTOM HEADER VALUE");
        return await base.SendAsync(request, cancellationToken);
    }
}

}

Вы регистрируете держательиспользуя:

service.AddTransient<HeaderHandler>()
    .AddHttpClient<MyHttpClient>()
    .AddHttpMessageHandler<HeaderHandler>();
...