Search code examples
c#asp.net-coredotnet-httpclienthttpclientfactory

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();

Solution

  • 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.