using System.Net.Http.Headers; namespace ZymonicServices; // https://github.com/reactiveui/refit?tab=readme-ov-file#reducing-header-boilerplate-with-delegatinghandlers-authorization-headers-worked-example class ZymonicAPIHandler : DelegatingHandler { private readonly IZymonicAA authTokenStore; private readonly IZymonicLogger _logger; public ZymonicAPIHandler(IZymonicLogger logger, IZymonicAA authTokenStore, HttpMessageHandler? innerHandler = null) : base(innerHandler ?? new HttpClientHandler() { UseCookies = false }) { this.authTokenStore = authTokenStore ?? throw new ArgumentNullException(nameof(authTokenStore)); _logger = logger; } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var token = await authTokenStore.GetToken(); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); try { var result = await base.SendAsync(request, cancellationToken).ConfigureAwait(true); result.EnsureSuccessStatusCode(); return result; } catch (Exception e) { debugInnerException(e); throw; } } private void debugInnerException(Exception exception) { _logger.LogError(exception.ToString()); if (exception.InnerException != null) { debugInnerException(exception.InnerException); } } }