IWebProxy policy = WebRequest.GetSystemWebProxy();
request.Proxy = policy;

把返回的对象保留为 IWebProxy。这段代码适用于现有的基于 WebRequest 的代码,并不是建议在新应用中采用这一旧式 API。

WebProxy 实现了该接口,但并非所有实现该接口的对象都继承自 WebProxy。因此系统包装对象可能在发生任何网络请求之前就拒绝这次转换。像 WebProxyWrapperOpaque 这样的 .NET Framework 私有类名只是实现细节,不是代理端点或账户的问题。

在决定路由时,用实际的目标 URI 调用 IsBypassed(destination) 和 GetProxy(destination)。绕过可能直接返回该目标,而基于 PAC 的策略可以为另一个主机选择另一条路由。

身份验证方面,IWebProxy 已经公开了 Credentials。使用受支持的账户和方法即可,无需通过强制转换来访问该属性。

只抽取一个 URI 去构造替代的 WebProxy,会丢弃 原始策略按目标区分的处理行为。只有当固定端点就是应用所需的配置时才这样做,而不要把它当作类型错误的变通办法。

相关文章