HttpMessageHandler с BeforeRequest и AfterResponse
Задача: Добавить JWT токен перед отправкой HTTP запросов используя HttpMessageHandler. Имеется либа, которая принимает только HttpMessageHandler. Нужно реализовать это используя все бенефиты IHttpMessageHandlerFactory или другой фабрики.
Была такая идея, но не получится ткк HttpMessageHandler.SendAsync internal
public class InterceptableHttpMessageHandler : HttpMessageHandler
{
private readonly HttpMessageHandler baseHandler;
public InterceptableHttpMessageHandler(HttpMessageHandler baseHandler) // baseHandler from IHttpMessageHandlerFactory
{
this.baseHandler = baseHandler;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// call "on before"
this.baseHandler.SendAsync(...) // internal :(
}
}
UPD
Создал запускаемый фидл: https://dotnetfiddle.net/lQwx2Y Фидл не решает проблему, ткк все равно HttpMessageHandler создается вручную, но примерно показывает проблему. И да, baseUrl должно меняется в рантайме, поэтому не уверен на счет неймд клиентов и всего такого.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
public class InterceptableHttpMessageHandler : DelegatingHandler
{
public InterceptableHttpMessageHandler(HttpMessageHandler innerHandler) : base(innerHandler)
{
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
this.OnBefore(request);
return base.SendAsync(request, cancellationToken);
}
private void OnBefore(HttpRequestMessage request)
{
request.Headers.Add("testheader", "testheaderval");
}
}