我的用例是这样的,我想呼叫一个web服务,如果我在需要身份验证的代理服务器后面,我想只使用默认凭据...
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;
否则我只是简单地拨打电话,确定是否需要事先验证是非常好的,而不是在我尝试拨打电话后处理异常。
想法?
答案 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,这似乎是处理代理的最“正确”方式...