WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有啥区别?

Posted

技术标签:

【中文标题】WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有啥区别?【英文标题】:What's the difference between WebRequest.DefaultWebProxy and WebRequest.GetSystemWebProxy()?WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有什么区别? 【发布时间】:2013-01-31 00:19:31 【问题描述】:

我想知道DefaultWebProxyGetSystemWebProxy() 之间的主要区别是什么。 MSDN上有一些描述,但我还是觉得需要更多细节才能更好地理解。

另外,假设我的 C# winform 应用程序有以下代理配置选项

    自动检测代理设置 使用系统默认设置 无代理

那么哪个方法去哪个选项?说Auto-detect proxy在某种程度上等于Use system default设置是否正确?

【问题讨论】:

【参考方案1】:

根据MSDN article 的WebRequest.DefaultWebProxy,此属性将提供app.config 文件中指定的代理信息。 .NET Framework v3.5 MSDN Article 似乎缺少此特定细节。

WebRequest.GetSystemWebProxy() 而言,MSDN article for it 声明此方法将提供系统范围的已配置代理(控制面板> Internet 选项)。


这就是我建议您实现上述三个选项的方式:

    自动检测代理设置 实现您自己的代理发现逻辑; 更改系统设置以匹配您的应用程序设置,并使用WebRequest.GetSystemWebProxy()我不推荐这种方法); 最好不要包含此选项,让用户使用相应的系统范围设置以及“使用系统默认设置”选项; 使用系统默认设置 使用WebRequest.GetSystemWebProxy(); 无代理 确保取消设置WebRequest.DefaultWebProxyWebRequest.Proxy 属性;

编辑:如果app.config中没有配置代理,WebRequest.DefaultWebRequest几乎WebRequest.GetSystemWebProxy()相同(至少对于.NET 4.5)。不同之处在于 WebRequest.GetSystemWebProxy() 将运行 PAC 脚本(如果有)以进行代理定义。感谢 Gabrielius 和 23W 提供以下 cmets。

【讨论】:

感谢您的回答,杰西。我会考虑实施的方法。让我们看看其他人怎么说。 @woodykiddy 不客气,但是,您能否详细说明您要完成的工作?此外,您能否定义与DefaultWebProxyGetSystemWebProxy() 之间的差异相关的详细信息? 我正在尝试提供用户可以选择是否使用代理的选项。客户端应用程序将在调用 Web 服务之前应用代理设置。正如我在之前的帖子中所说,我只是觉得这里有点不确定。在我看来,这两个 API 提供的功能几乎相同。 @woodykiddy 他们提供了类似的东西,但并不完全相同。 DefaultWebProxy 将是 app.config 文件中的设置 - 无论是由用户手动输入,还是通过应用程序设置; GetSystemWebProxy() 严格来说是系统范围的 Internet 选项设置。基本上,DefaultWebProxy 可以用作应用程序的“自定义代理配置”,GetSystemWebProxy() 相当于“使用系统设置”。 已经好几年了,但是@Jesse,如果在app.config中没有配置代理,你可以添加一个注释,WebRequest.DefaultWebRequest最初等于WebRequest.GetSystemWebProxy() >(至少对于 .NET 4.5)。

以上是关于WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章