How can I add HTTP interceptors in Blazor WASM?

Viewed 187
1 Answers

You can use delegating handlers. Create a new class extending DelegatingHandler:

public class MyDelegatingHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // before request
        
        var response = await base.SendAsync(request, cancellationToken);
        
        // after request
    }
}

Then register it in Program.cs:

builder.Services.AddTransient<MyDelegatingHandler>();

builder.Services
    .AddHttpClient("ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
    .AddHttpMessageHandler<MyDelegatingHandler>();

Documentation

From documentation:

Multiple handlers can be registered in the order that they should execute. Each handler wraps the next handler until the final HttpClientHandler executes the request:

builder.Services.AddTransient<SampleHandler1>();
builder.Services.AddTransient<SampleHandler2>();

builder.Services.AddHttpClient("MultipleHttpMessageHandlers")
    .AddHttpMessageHandler<SampleHandler1>()
    .AddHttpMessageHandler<SampleHandler2>();

In the preceding code, SampleHandler1 runs first, before SampleHandler2.

Related