如何(优雅地)确定C#winforms应用程序中是否需要代理身份验证

时间:2009-01-29 01:29:37

标签: c# winforms authentication proxy

我的用例是这样的,我想呼叫一个web服务,如果我在需要身份验证的代理服务器后面,我想只使用默认凭据...

  WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

否则我只是简单地拨打电话,确定是否需要事先验证是非常好的,而不是在我尝试拨打电话后处理异常。

想法?

6 个答案:

答案 0 :(得分:14)

只有在我第一次部署app之后才意识到有些用户在防火墙后面...才开始测试它。而不是测试“407所需的身份验证”,我只是做同样的Proxy设置,无论是否需要......

System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri.AbsoluteUri);
//HACK: add proxy
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
req.Proxy = proxy;
req.PreAuthenticate = true;
//HACK: end add proxy
req.AllowAutoRedirect = true;
req.MaximumAutomaticRedirections = 3;
req.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; DeepZoomPublisher.com)";
req.KeepAlive = true;
req.Timeout = 3 * 1000; // 3 seconds

我不确定相对的优点/缺点是什么(try {} catch {}没有代理,而不是仅仅使用上面的代码,但是这个代码现在似乎对我工作(验证代理)和在家(没有)。

答案 1 :(得分:4)

System.Net.WebProxy有一个名为UseDefaultCredentials的属性可能是你想要的(但我必须承认这里有点无知)。相关文档的链接是here

答案 2 :(得分:1)

实际上,似乎这毕竟不是问题,以前我就像这样设置了身份验证......

  WebProxy proxy = new WebProxy(@"http://<myProxyAddress>:8080");
  proxy.Credentials = new NetworkCredential(<myUSerName>, <myPassword>, <myDomain>);
  WebRequest.DefaultWebProxy = proxy;

当我在代理服务器后面但在没有代理服务器时抛出错误会很好,所以我当然希望上面的错误与我仍然只是设置相同的凭据,但你知道他们说的是什么假设事情....事实上,设置默认信用卡完全没有错误,一切都很好。

答案 3 :(得分:0)

如果要检查IE中的代理设置,您还可以查看注册表:检查注册表树的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings分支 - 那里有很多选项和设置。最值得注意的是:ProxyEnable(DWORD,0 =无代理,1 =启用代理)。

答案 4 :(得分:0)

我强烈建议您尝试this answer类似的问题(不是:不是接受的答案)。没有代码更改,只是app.config文件中的一行。

答案 5 :(得分:-1)

看起来如果你单独留下代理服务器.NET should just use the IE proxy settings,这似乎是处理代理的最“正确”方式...