Resolver HttpClient depende de la URL (con/sin Proxy)
La tarea consiste en configurar el proxy de HttpClient según una URL. Por ejemplo, si una URL contiene “hostname.com”, se debe establecer.
¿Cuál es la mejor práctica?
¿Es la siguiente una solución?
Registrar diferentes HttpClients en DI como:
— Configurar HttpClients tipados con diferentes proxies para cada servicio
services.AddHttpClient
services.AddHttpClient
— Configurar HttpClient con nombre sin proxy
services.AddHttpClient(“NoProxy”);
Y Service1 y Service2 resolverán IHttpClientFactory:
public class Service1
{
readonly IHttpClientFactory _httpClientFactory;
public IdgwConnectorManager(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public void Get(string url)
{
if (url...)
{
_httpClientFactory.CreateClient(nameof(Service1));
}
else
{
_httpClientFactory.CreateClient("NoProxy");
}
}
}
davy.ai
Mejores prácticas para configurar el proxy de HttpClient en función de la URL
La mejor práctica para configurar el proxy de
HttpClient
en función de la URL es utilizar unDelegatingHandler
que verifique la URL de la solicitud y configure el proxy correspondiente.Aquí tienes un ejemplo de implementación:
A continuación, registra el
ProxyHandler
en el métodoConfigureServices
deStartup.cs
:En este ejemplo, estamos registrando
MiHttpClient
conAddHttpClient
y añadiendo elProxyHandler
como unDelegatingHandler
utilizandoAddHttpMessageHandler
. ElProxyHandler
se ejecutará antes de que las solicitudes se envíen al servidor y configurará el proxy en función de la URL.Nota: Dependiendo de tus requisitos específicos, es posible que debas implementar tu propia interfaz
IProxyProvider
para obtener la configuración del proxy.¿Es válida la solución proporcionada?
La solución proporcionada de registrar diferentes instancias de
HttpClient
para cada servicio con sus propios proxies, y unHttpClient
con nombre sin proxy, puede funcionar, pero no es la mejor práctica para este escenario. Puede llevar a un código redundante y puede resultar difícil de gestionar a medida que aumenta la cantidad de servicios.Utilizar un
DelegatingHandler
para configurar el proxy en función de la URL es una solución más flexible y escalable.