Используя refit, вы можете реализовать DelegatingHandler, а затем зарегистрировать его, чтобы сделать все, что вам нужно, с http-запросом перед его отправкой. Здесь добавляется заголовок источника к каждому запросу. Интерфейс Refit не должен беспокоиться об этом.
public class AddOriginHeaderToRequest : DelegatingHandler
{
private const string ServiceNameSettingLocation = "AppConfig:Logging:ServiceName";
private readonly IHttpContextAccessor httpContextAccessor;
private readonly IConfiguration configuration;
public AddOriginHeaderToRequest(IHttpContextAccessor httpContextAccessor, IConfiguration configuration)
{
this.httpContextAccessor = httpContextAccessor;
this.configuration = configuration;
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var origin = this.configuration[AddOriginHeaderToRequest.SomethingThatShouldBeDefined];
if (!(request.Headers.Contains("origin") || request.Headers.Contains("Origin")) && origin != null)
{
request.Headers.Add("origin", origin);
}
return await base.SendAsync(request, cancellationToken);
}
}
Затем зарегистрируйте его так:
services.AddTransient<AddOriginHeaderToRequest>();
Тогда клиент refit может быть зарегистрирован следующим образом (это отредактированная версия один из наших пакетов nuget, поэтому мы надеемся дать представление о том, как он работает):
public static IHttpClientBuilder AddHttpClientWithDefaultHandlers(
this IServiceCollection services,
string name,
Action<HttpClient> configureClient)
{
return services.AddHttpClient(name, configureClient)
.AddHttpMessageHandler<AddOriginHeaderToRequest>();
}
Затем в нашем сервисе мы регистрируем наш обработчик refit следующим образом:
services.AddHttpClientWithRefitAndDefaultHandlers<ImyHttpClient>(
"myHttpClient",
c =>
{
c.BaseAddress = new Uri(appSettings.Value.AppConfig.SomeUrl);
});
Это может быть упрощенный, но у нас есть несколько различных обработчиков, которые стандартно массируют наши http-запросы.
Я надеюсь, что это даст вам указатель на то, как это может работать.