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.