.NET IWebProxy: 시스템 프록시를 WebProxy로 캐스팅하지 마세요
IWebProxy로 반환된 시스템 프록시를 구체 클래스가 WebProxy라고 가정하지 않고 처리합니다.
IWebProxy policy = WebRequest.GetSystemWebProxy();
request.Proxy = policy;
반환된 개체를 IWebProxy로 유지하세요. 이 조각은 기존 WebRequest 기반 코드에 해당하며, 새 애플리케이션에서 그 레거시 API를 도입하라는 권장은 아닙니다.
WebProxy는 인터페이스를 구현하지만, 인터페이스를 구현하는 모든 개체가 WebProxy에서 상속되는 것은 아닙니다. 따라서 시스템 래퍼는 네트워크 요청이 일어나기 전에 캐스트를 거부할 수 있습니다. WebProxyWrapperOpaque 같은 .NET Framework의 비공개 클래스 이름은 구현 세부 사항이며, 프록시 엔드포인트나 계정 문제가 아닙니다.
경로 결정에는 실제 대상 URI와 함께 IsBypassed(destination) 및 GetProxy(destination)를 호출하세요. 바이패스는 그 대상 자체를 반환할 수 있고, PAC 기반 정책은 다른 호스트에 다른 경로를 선택할 수 있습니다.
인증의 경우 IWebProxy가 이미 Credentials를 노출합니다. 속성에 접근하려고 캐스팅하지 말고 지원되는 계정과 방식을 사용하세요.
대체 WebProxy를 만들기 위해 URI 하나를 추출하면 원래 정책의 대상별 동작이 사라집니다. 고정 엔드포인트가 의도된 애플리케이션 구성일 때만 그렇게 하고, 형식 오류의 우회책으로 삼지 마세요.