refit icon indicating copy to clipboard operation
refit copied to clipboard

[Bug]: HttpClient named client with the same name overwrite ConfigureHttpClient BaseAddress

Open squadwuschel opened this issue 1 year ago • 1 comments

Describe the bug 🐞

I am using named clients to Authorize my client access, and here I have multiple APIs using the same Named client. Now I am creating multiple Refit Clients for multiple Interfaces (multiple different API URLs) and all use the same Named client to authenticate.

When I Inject the API Client Interfaces into my services/controller, from all Interfaces the BaseAdress is the last baseAddress from my Registered Refit Clients.

Step to reproduce

Here you can see my setup:

  services.AddHttpClient("GitHubClient", client =>
        {
            client.BaseAddress = new Uri("https://api.github.com/");
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            // Weitere Konfigurationen hier ...
        });
       
  services
       .AddRefitClient(typeof(IArticlesApi), null, $"GitHubClient")
       .ConfigureHttpClient(c => c.BaseAddress = new Uri("https://myArticlesApi.com"));

  services
       .AddRefitClient(typeof(IContentApi), null, $"GitHubClient")
       .ConfigureHttpClient(c => c.BaseAddress = new Uri("https://myContentApi.com"));

Reproduction repository

https://github.com/reactiveui/refit

Expected behavior

when I now inject the "IContentApi" and the "IArticlesApi" into an Controller or Service/Provider the Client.BaseAdress on both injected Interfaces is "https://myContentApi.com" => the last registered c.BaseAddress. That seems to be wrong I would say, because, when I Use multiple different named clients, then each BaseAddress is like expected.

Screenshots 🖼️

No response

IDE

Rider Windows

Operating system

Windows 10

Version

No response

Device

No response

Refit Version

7.0.0

Additional information ℹ️

No response

squadwuschel avatar Apr 23 '24 12:04 squadwuschel

This is expected behavior. You're just reconfiguring the same IHttpClientFactory, and the actual clients aren't instantiated until injection time, and the factory produces different instances for each injection site, they are not all the same reference to the same client.

derekm avatar Nov 04 '24 18:11 derekm