Full source code here.
Over the past week I have written a few articles about HttpClientFactory
and dependency injection in .NET Core 2.1. There is one scenario I didn’t deal with – calling a HttpClient
from inside the Main
method in Program.cs
. If you have read my previous post you will probably know how do it, but in case you landed on this post from a search here is how to do it.
In Startup.cs
, add the HttpClientFactory
to the service collection.
public void ConfigureServices(IServiceCollection services) { services.AddHttpClient("OpenBreweryDb", client => { client.BaseAddress = new Uri("https://api.openbrewerydb.org/breweries/"); client.DefaultRequestHeaders.Add("Accept", "application/json"); }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
In Progam.cs
I split the building the webHost from running it so I can get at the service collection.
public static void Main(string[] args) { IWebHost webHost = CreateWebHostBuilder(args).Build(); CallSomeRemoteService(webHost.Services); webHost.Run(); }
Then I grab a HttpClientFactory
from the service collection and a HttpClient
from inside the HttpClientFactory
.
private static void CallSomeRemoteService(IServiceProvider serviceProvider) { var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>(); var httpClient = httpClientFactory.CreateClient("OpenBreweryDb"); var response = httpClient.GetAsync("?by_state=Massachusetts&by_name=night").Result; if (response.IsSuccessStatusCode) { var breweries = response.Content.ReadAsAsync<List<Brewery>>().Result; } }
That’s it, easy when you know how.
Full source code here.