/// <summary> /// Adds and configures custom resilience policies. /// </summary> /// <param name="clientBuilder">Configured HttpClient builder.</param> /// <param name="settings">Custom resilience policy settings.</param> /// <returns>An <see cref="IHttpClientBuilder"/> that can be used to configure the client.</returns> public static IHttpClientBuilder AddResiliencePolicies( this IHttpClientBuilder clientBuilder, ResiliencePoliciesSettings settings) { return(clientBuilder .AddTimeoutPolicy(settings.OverallTimeoutPolicySettings) .AddRetryPolicy(settings.RetrySettings) .AddCircuitBreakerPolicy(settings.CircuitBreakerSettings) .AddTimeoutPolicy(settings.TimeoutPerTryPolicySettings)); }
/// <summary> /// Adds the <see cref="IHttpClientFactory"/> and related services to the <see cref="IServiceCollection"/> /// with pre-configured JSON headers and custom resilience policies. /// </summary> /// <returns>An <see cref="IHttpClientBuilder"/> that can be used to configure the client.</returns> public static IHttpClientBuilder AddJsonClient <TClientInterface, TClientImplementation>( this IServiceCollection sc, Uri baseAddress, ResiliencePoliciesSettings settings, string clientName = null) where TClientInterface : class where TClientImplementation : class, TClientInterface { var delta = TimeSpan.FromMilliseconds(1000); void DefaultClient(HttpClient client) { client.BaseAddress = baseAddress; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.Timeout = settings.OverallTimeout + delta; } var httpClientBuilder = string.IsNullOrEmpty(clientName) ? sc.AddHttpClient <TClientInterface, TClientImplementation>(DefaultClient) : sc.AddHttpClient <TClientInterface, TClientImplementation>(clientName, DefaultClient); httpClientBuilder.AddResiliencePolicies(settings); return(httpClientBuilder); }