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 【问题描述】:我想知道DefaultWebProxy
和GetSystemWebProxy()
之间的主要区别是什么。 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.DefaultWebProxy
和WebRequest.Proxy
属性;
编辑:如果app.config中没有配置代理,WebRequest.DefaultWebRequest
几乎与WebRequest.GetSystemWebProxy()
相同(至少对于.NET 4.5)。不同之处在于 WebRequest.GetSystemWebProxy()
将运行 PAC 脚本(如果有)以进行代理定义。感谢 Gabrielius 和 23W 提供以下 cmets。
【讨论】:
感谢您的回答,杰西。我会考虑实施的方法。让我们看看其他人怎么说。 @woodykiddy 不客气,但是,您能否详细说明您要完成的工作?此外,您能否定义与DefaultWebProxy
和GetSystemWebProxy()
之间的差异相关的详细信息?
我正在尝试提供用户可以选择是否使用代理的选项。客户端应用程序将在调用 Web 服务之前应用代理设置。正如我在之前的帖子中所说,我只是觉得这里有点不确定。在我看来,这两个 API 提供的功能几乎相同。
@woodykiddy 他们提供了类似的东西,但并不完全相同。 DefaultWebProxy
将是 app.config 文件中的设置 - 无论是由用户手动输入,还是通过应用程序设置; GetSystemWebProxy()
严格来说是系统范围的 Internet 选项设置。基本上,DefaultWebProxy
可以用作应用程序的“自定义代理配置”,GetSystemWebProxy()
相当于“使用系统设置”。
已经好几年了,但是@Jesse,如果在app.config中没有配置代理,你可以添加一个注释,WebRequest.DefaultWebRequest
最初等于WebRequest.GetSystemWebProxy()
>(至少对于 .NET 4.5)。以上是关于WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章