WebRequest.DefaultWebProxy和WebRequest.GetSystemWebProxy()有什么区别?

24
我想知道 DefaultWebProxyGetSystemWebProxy() 之间的主要区别是什么。虽然 MSDN 上有一些描述,但我仍觉得需要更多细节以更好地理解。
另外,假设我在 C# 的 WinForm 应用程序中有以下代理配置选项:
  1. 自动检测代理设置
  2. 使用系统默认设置
  3. 无代理
那么哪个选项对应哪个方法?是否可以说 自动检测代理 稍微相当于 使用系统默认 设置?
1个回答

21
根据MSDN文章中对于WebRequest.DefaultWebProxy的说明,此属性将提供在app.config文件中指定的代理信息。看起来.NET Framework v3.5 MSDN Article错过了这个具体细节。
至于WebRequest.GetSystemWebProxy()其MSDN文章表明该方法将提供系统范围内配置的代理(控制面板>Internet选项)。
以下是我建议您实现所述三个选项的方式:
1. 自动检测代理设置 - 实现您自己的代理发现逻辑;或者 - 更改系统设置以匹配应用程序的设置,并使用WebRequest.GetSystemWebProxy()我不建议采用这种方法);或者 - 最好不包括此选项,让用户使用相应的系统范围设置以及“使用系统默认设置”选项;
2. 使用系统默认设置 - 使用WebRequest.GetSystemWebProxy()
3. 无代理 - 确保取消设置WebRequest.DefaultWebProxyWebRequest.Proxy属性;

编辑: 如果在 app.config 中没有配置代理,那么 WebRequest.DefaultWebRequest 几乎与 WebRequest.GetSystemWebProxy()(至少对于 .NET 4.5)相同。不同之处在于 WebRequest.GetSystemWebProxy() 将运行 PAC 脚本(如果有)以进行代理定义。
感谢下面的评论者Gabrielius23W


谢谢你的回答,Jesse。我会考虑实现的方法。让我们看看其他人有什么想法。 - woodykiddy
@woodykiddy 不客气,但是你能详细说明一下你想要实现什么吗?此外,你能否定义一下你希望澄清的关于 DefaultWebProxyGetSystemWebProxy() 之间差异的细节? - Jesse
已经过去了几年,但是@Jesse,你可以添加一条注释,即如果在_app.config中未配置代理(至少对于.NET 4.5),则WebRequest.DefaultWebRequest最初等于WebRequest.GetSystemWebProxy() - Gabrielius
1
当“使用系统默认设置”使用PAC脚本进行代理定义时,WebRequest.DefaultWebRequest不等于WebRequest.GetSystemWebProxy()。即使在.NET 4.5上也是如此。 - 23W
1
GetSystemWebProxy()在一个从未登录过任何计算机的新账户上不会返回系统范围的Internet选项设置。这只是一个提示。 - Robert Smith
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接