private static async Task run1(IHttpClientGenerator httpClientGenerator) { System.Console.Out.WriteLine( $"Calling 'https://www.github.com' using the predefined named configuration 'github'" ); using (var httpClient = httpClientGenerator.CreateHttpClient("github")) { var responce = await httpClient.GetAsync(""); System.Console.Out.WriteLine($"StatusCode: {responce.StatusCode}"); } // The httpClient is disposed - but not the socket (PrimaryHandler). // Within 2 minutes the socket will be reused - if a CreateHttpClient is called. // Being 2 minutes unused the socket will be disposed. }
private static async Task run3(string urlOfSampleServer, IHttpClientGenerator httpClientGenerator) { System.Console.Out.WriteLine( $"Calling '{urlOfSampleServer}' using a dynamic configuration" ); int loop = 0; var configuration = new HttpClientConfiguration() { Name = "dynamicHttpSampleServer", Discriminator = "anonymous", BaseAddress = urlOfSampleServer, }; configuration.PrimaryHandlerConfigurations.Add((builder) => { System.Console.Out.WriteLine($"This is called only once in the loop {loop} for PrimaryHandlerConfigurations."); // enable windows-auth builder.EnsurePrimaryHandler().UseDefaultCredentials = true; // you can call // builder.AdditionalHandlers.Add // you don't need to do it seperatly }); configuration.AdditionalHandlerConfigurations.Add((builder) => { System.Console.Out.WriteLine($"This is called only once in the loop {loop} for AdditionalHandlerConfigurations."); builder.AdditionalHandlers.Add( new WhateverDelegatingHandler("you") ); }); configuration.HttpClientConfigurations.Add((HttpClient, httpClientConfiguration) => { System.Console.Out.WriteLine($"This is called for each request - now in the loop {loop} for HttpClientConfigurations."); }); for (loop = 0; loop < 3; loop++) { using (var httpClient = httpClientGenerator.CreateHttpClient(configuration)) { var responce = await httpClient.GetAsync(""); var content = await responce.Content.ReadAsStringAsync(); System.Console.Out.WriteLine($"Responce: {responce.StatusCode} {content}"); } } }
private static async Task run2(IHttpClientGenerator httpClientGenerator) { System.Console.Out.WriteLine( $"Calling 'https://www.github.com' using a dynamic configuration" ); var configuration = new HttpClientConfiguration() { Name = "dynamic", Discriminator = "anonymous", BaseAddress = "https://www.github.com" }; // // To reuse the configuration set it to the Configurations. // httpClientGenerator.Configurations[configuration.Name] = configuration; // after the configuration is shared don't modify it - unless you know it better. // // You may / You can do this - You *don't* have to. // // The fields // configuration.BaseAddress // configuration.Name // configuration.Discriminator // are part of the HashCode / Equals. // // To reuse the socket in a valid way set the values. // configuration.Name: the name as e.g "DynamicForMyAPI" // configuration.Discriminator: if you have 2 user you may set Discriminator = username // /* * The name is part of the logger * info: System.Net.Http.HttpClient.github.LogicalHandler[100] * Start processing HTTP request GET https://www.github.com/ * * info: System.Net.Http.HttpClient.dynamic.LogicalHandler[100] * Start processing HTTP request GET https://www.github.com/ */ using (var httpClient = httpClientGenerator.CreateHttpClient(configuration)) { var responce = await httpClient.GetAsync(""); System.Console.Out.WriteLine($"StatusCode: {responce.StatusCode}"); } }