Hawkzey
Hawkzey

Reputation: 1153

Adding a handler to all clients created via IHttpClientFactory?

Is there a way to add a handler to all clients created by the IHttpClientFactory?

I know you can do the following on named clients:

services.AddHttpClient("named", c =>
{
    c.BaseAddress = new Uri("TODO");
    c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    c.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue
    {
        NoCache = true,
        NoStore = true,
        MaxAge = new TimeSpan(0),
        MustRevalidate = true
    };
}).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
    AllowAutoRedirect = false,
    AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
});

But I don't want to use named clients.

I just want to add a handler to all clients that are given back to me via:

clientFactory.CreateClient();

Upvotes: 22

Views: 11269

Answers (1)

Kirk Larkin
Kirk Larkin

Reputation: 93053

When you use CreateClient with no parameters, you implicitly request a named client, where the name is Options.DefaultName (string.Empty).

To affect this default instance, specify Options.DefaultName when calling AddHttpClient:

services.AddHttpClient(Options.DefaultName, c =>
{
    // ...
}).ConfigurePrimaryHttpMessageHandler(() =>
{
    // ...
});

The API docs for AddHttpClient states the following:

Use DefaultName as the name to configure the default client.

Upvotes: 30

Related Questions