I'm working on a Blazor WebAssembly application and have created a DelegatingHandler called MyJWTHttpHandler to attach a JWT token to outgoing HTTP requests. However, I've encountered an issue where the handler does not execute on the first request until I refresh the page. After the refresh, the handler works as expected.
Here's the implementation of my handler:
public class MyJWTHttpHandler : DelegatingHandler{ private readonly ISessionStorageService _sessionStorage; public MyJWTHttpHandler(ISessionStorageService sessionStorage) : base() { _sessionStorage = sessionStorage; } protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { try { Console.Error.WriteLine("Sending Request"); var token = await _sessionStorage.ReadEncryptedItemAsync<object>("Token"); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token?.ToString()); return await base.SendAsync(request, cancellationToken); } catch (Exception ex) { Console.Error.WriteLine($"Error Sending Request: {ex.Message}"); return await base.SendAsync(request, cancellationToken); } }}And here’s how I’m registering the handler in Program.cs:
builder.Services.AddTransient<MyJWTHttpHandler>();builder.Services.AddHttpClient("BaseUrl", client =>{ client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));}).AddHttpMessageHandler<MyJWTHttpHandler>();