我应该如何设置默认代理使用默认凭据?

以下代码适用于我:

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.ProxyWebRequest.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

这是一个错误。