我应该如何设置默认代理使用默认凭据?
以下代码适用于我:
var webProxy = WebProxy.GetDefaultProxy(); webProxy.UseDefaultCredentials = true; WebRequest.DefaultWebProxy = webProxy;
不幸的是, WebProxy.GetDefaultProxy()
已被弃用。 我还应该做什么?
(使用app.config来设置defaultProxy设置在我的部署中是不允许的)
从.NET 2.0中,你不需要这样做。 如果您未明确设置Web请求的Proxy属性,则使用静态WebRequest.DefaultWebProxy的值。 如果您想更改所有后续WebRequest使用的代理,则可以设置此静态DefaultWebProxy属性。
WebRequest.DefaultWebProxy的默认行为是使用与Internet Explorer所使用的相同的基础设置。
如果你想使用不同的代理设置给当前用户,那么你需要编码
WebRequest webRequest = WebRequest.Create("http://stackoverflow.com/"); webRequest.Proxy = new WebProxy("http://proxyserver:80/",true);
要么
WebRequest.DefaultWebProxy = new WebProxy("http://proxyserver:80/",true);
您还应该记住,代理的对象模型包括代理可以根据目标主机名而不同的概念。 在debugging和检查webRequest.Proxy的属性时,这可能会使事情有点混乱。 呼叫
webRequest.Proxy.GetProxy(new Uri("http://google.com.au"))
查看将要使用的代理服务器的实际细节。
似乎有一些关于是否可以设置webRequest.Proxy
或WebRequest.DefaultWebProxy = null
来防止使用任何代理的争论。 这似乎对我工作正常,但您可以将其设置为new DefaultProxy()
没有参数,以获得所需的行为。 另一件要检查的事情是,如果代理元素存在于您的应用程序configuration文件中,则.NET Framework将不使用Internet Explorer中的代理设置。
“MSDN杂志”的文章“在.NET中使用自动configuration让用户负担”提供了关于发生了什么的进一步的细节。
对于那些与Brian Genisio不同的人来说, 他们可以设置应用程序configuration文件的内容: – 不要在代码中做任何事情。 相反,将此添加到您的app.config / web.config。
<system.net> <defaultProxy useDefaultCredentials="true" /> </system.net>
真正而真实的使用默认凭据的默认值应该是“true”; 我看到这个问题混淆了很多人 – 开发人员,用户,IT人员。
欲了解更多信息请参阅这里: – http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx
更新:我已经创build了这个问题/微软的想法,将默认的useDefaultCredentials从false更改为true,以便这个问题消失,.NET应用程序“只是工作”; 如果您同意,请将其投票:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
这将强制DefaultWebProxy
使用默认的凭据,类似的效果通过UseDefaultCredentials = true
。
因此, 所有新创build的WebRequest
实例将使用已configuration为使用代理默认凭证的默认代理。
您可以使用Reflection将代码中的UseDefaultCredentials
-Property设置为“true”
System.Reflection.PropertyInfo pInfo = System.Net.WebRequest.DefaultWebProxy.GetType().GetProperty("WebProxy", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); ((System.Net.WebProxy)pInfo.GetValue(System.Net.WebRequest.DefaultWebProxy, null)).UseDefaultCredentials = true;
这个线程是旧的,但我最近偶然发现了defaultProxy问题,也许它有助于其他人。
我使用configuration设置安德鲁build议。 在部署时,我的客户得到一个错误,说没有足够的权限来设置configuration“defaultProxy”。
不知道为什么我没有权限来设置这个configuration,该怎么做,我只是删除它,它仍然工作。 所以看来在VS2013这个问题是固定的。
当我们在这时:
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");
使用您的凭据的默认代理。 如果你想强制不使用代理,只需将DefaultWebProxy设置为null(虽然我不知道是否需要)。
似乎在一些新的应用程序的configuration是不同的,因为我已经看到这个问题如何使用HttpClient类的代理进行身份validation?
<system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="True" /> </defaultProxy> </system.net>
还logging在https://msdn.microsoft.com/en-us/library/dkwyc043.aspx
在我的部署中,我不能使用app.config来embeddedAndrew Webb的build议。
所以我正在这样做:
IWebProxy proxy = WebRequest.GetSystemWebProxy(); proxy.Credentials = CredentialCache.DefaultCredentials; WebClient wc = new WebClient(); wc.UseDefaultCredentials = true; wc.Proxy = proxy;
以防万一你想检查我的IE设置:
这是新build议的方法。
WebRequest.GetSystemWebProxy();
需要在一些系统中设置null代理权限:
Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials昏暗的请求作为WebRequest = WebRequest.Create(sRemoteFileURL)request.Proxy = Nothing
这是一个错误。