.NET IWebProxy: evita convertir los proxies del sistema a WebProxy
Trata un proxy del sistema devuelto como IWebProxy sin suponer que su clase concreta es WebProxy.
IWebProxy policy = WebRequest.GetSystemWebProxy();
request.Proxy = policy;
Conserva el objeto devuelto como IWebProxy. Este fragmento se aplica a código existente basado en WebRequest, no es una recomendación de adoptar esa API heredada en una aplicación nueva.
WebProxy implementa la interfaz, pero no todos los objetos que implementan la interfaz heredan de WebProxy. Por eso un contenedor del sistema puede rechazar la conversión antes de que ocurra cualquier solicitud de red. Un nombre de clase privado de .NET Framework como WebProxyWrapperOpaque es un detalle de implementación, no un problema del extremo del proxy ni de la cuenta.
Para decidir una ruta, llama a IsBypassed(destination) y GetProxy(destination) con el URI real de destino. Una omisión puede devolver ese mismo destino, y una directiva basada en PAC puede elegir otra ruta para otro host.
Para la autenticación, IWebProxy ya expone Credentials. Usa la cuenta y el método admitidos sin convertir para llegar a la propiedad.
Extraer un solo URI para construir un WebProxy de reemplazo descarta el comportamiento por destino de la directiva original. Hazlo solo cuando un extremo fijo sea la configuración prevista de la aplicación, no como solución alternativa a un error de tipo.