Dynamically Updating the Request Header of a HttpClientFactory Generated HttpClient, Part 2

Full source code here.

This is a alternative to the approach described in a previous post.

On a slack channel there was some discussion around the use of a little known extension method on HttpClientBuilder, ConfigureHttpClient. Using this extension method provides another way to dynamically alter the header of a HttpClient provided by the factory.

In ConfigureServices(..) I setup the two services I need, the MemoryCache and the TokenGenerator.

Then, where I configure the HttpClientFactory I call the ConfigureHttpClient, pass it an Action that takes the ServiceProvider and the HttpClient I’m configuring.

Inside the Action, I take a TokenGenerator from the service collection and then add the token to the client header.

 1public void ConfigureServices(IServiceCollection services)
 2{
 3    services.AddMemoryCache();
 4    services.AddSingleton<ITokenGenerator, TokenGenerator>();
 5
 6    services.AddHttpClient("RemoteServer", client =>
 7    {
 8        client.BaseAddress = new Uri("http://localhost:5000/api/");
 9        client.DefaultRequestHeaders.Add("Accept", "application/json");
10    }).ConfigureHttpClient((serviceProvider, client) =>
11    {
12        ITokenGenerator tokenGenerator = serviceProvider.GetService<ITokenGenerator>();
13        client.DefaultRequestHeaders.Add("Token", tokenGenerator.GetToken());
14    });
15
16    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
17}

That’s it, simpler than the approach in the previous post.

Full source code here.

comments powered by Disqus

Related