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.