Saltar al contenido

Cómo usar HttpClientHandler con HttpClientFactory en .NET Core

Este dilema se puede solucionar de diversas formas, por lo tanto te compartimos la que en nuestra opinión es la respuesta más completa.

Solución:

En realidad, no estoy usando la descompresión automática, pero la forma de lograrlo es registrar correctamente el cliente http

services.AddHttpClient()
   .ConfigureHttpMessageHandlerBuilder((c) =>
     new HttpClientHandler()
     
        AutomaticDecompression = System.Net.DecompressionMethods.GZip
     
   )
   .AddHttpMessageHandler((s) => s.GetService())

Más correctamente para definir HttpMessageHandler primario a través del método ConfigurePrimaryHttpMessageHandler() de HttpClientBuilder. Vea el ejemplo a continuación para configurar el cliente escrito cómo.

services.AddHttpClient()
    .ConfigureHttpClient((sp, httpClient) =>
    
        var options = sp.GetRequiredService>().Value;
        httpClient.BaseAddress = options.Url;
        httpClient.Timeout = options.RequestTimeout;
    )
    .SetHandlerLifetime(TimeSpan.FromMinutes(5))
    .ConfigurePrimaryHttpMessageHandler(x => new HttpClientHandler() 
    
        AutomaticDecompression = DecompressionMethods.GZip )
    .AddHttpMessageHandler(sp => sp.GetService().CreateAuthHandler())
    .AddPolicyHandlerFromRegistry(PollyPolicyName.HttpRetry)
    .AddPolicyHandlerFromRegistry(PollyPolicyName.HttpCircuitBreaker);

También puede definir la política de manejo de errores mediante el uso de métodos de construcción especiales de la biblioteca Polly. En este ejemplo, la política debe estar predefinida y almacenada en el servicio de registro de políticas.

public static IServiceCollection AddPollyPolicies(
    this IServiceCollection services, 
    Action setupAction = null)

    var policyOptions = new PollyPoliciesOptions();
    setupAction?.Invoke(policyOptions);

    var policyRegistry = services.AddPolicyRegistry();

    policyRegistry.Add(
        PollyPolicyName.HttpRetry,
        HttpPolicyExtensions
            .HandleTransientHttpError()
            .WaitAndRetryAsync(
                policyOptions.HttpRetry.Count,
                retryAttempt => TimeSpan.FromSeconds(Math.Pow(policyOptions.HttpRetry.BackoffPower, retryAttempt))));

    policyRegistry.Add(
        PollyPolicyName.HttpCircuitBreaker,
        HttpPolicyExtensions
            .HandleTransientHttpError()
            .CircuitBreakerAsync(
                handledEventsAllowedBeforeBreaking: policyOptions.HttpCircuitBreaker.ExceptionsAllowedBeforeBreaking,
                    durationOfBreak: policyOptions.HttpCircuitBreaker.DurationOfBreak));

    return services;

valoraciones y reseñas

Si te ha resultado de ayuda nuestro post, nos gustaría que lo compartas con más programadores de este modo contrubuyes a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *