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

时间:2008-11-18 20:00:53

标签: .net proxy

以下代码适用于我:

var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = webProxy;

不幸的是,WebProxy.GetDefaultProxy()已被弃用。我还应该做什么?

(使用app.config在我的部署中不允许设置defaultProxy设置)

10 个答案:

答案 0 :(得分:99)

对于那些与Brian Genisio不同的人, 能够设置应用程序配置文件的内容: - 不要在代码中做任何事情。而是将其添加到app.config / web.config。

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>

确实,使用默认凭据的默认值应为“true”;我看到这个问题让很多人感到困惑 - 开发人员,用户,IT人员。

欲了解更多信息,请点击此处: - http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

更新:我已经为Microsoft创建了这个问题/想法,将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

答案 1 :(得分:57)

从.NET 2.0开始,您不需要这样做。如果未在Web请求上显式设置Proxy属性,则它使用静态WebRequest.DefaultWebProxy的值。如果要更改所有后续WebRequests使用的代理,可以设置此静态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);

您还应该记住代理的对象模型包括代理可以根据目标主机名而不同的概念。在调试和检查webRequest.Proxy的属性时,这可能会使事情有点混乱。致电

webRequest.Proxy.GetProxy(new Uri("http://google.com.au"))查看将使用的代理服务器的实际详细信息。

关于您是否可以设置webRequest.ProxyWebRequest.DefaultWebProxy = null以阻止使用任何代理,似乎存在争议。这对我来说似乎没问题,但你可以将它设置为new DefaultProxy(),没有参数来获得所需的行为。另一件需要检查的事情是,如果应用程序配置文件中存在proxy element,则.NET Framework将使用Internet Explorer中的代理设置。

MSDN杂志文章Take the Burden Off Users with Automatic Configuration in .NET详细介绍了幕后发生的事情。

答案 2 :(得分:15)

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

这会强制DefaultWebProxy使用默认凭据,效果与UseDefaultCredentials = true类似。

因此所有新创建的 WebRequest 实例将使用默认代理,该代理已配置为使用代理的默认凭据。

答案 3 :(得分:4)

您可以使用Reflection将UseDefaultCredentials - 属性从代码设置为“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;

答案 4 :(得分:2)

这个帖子很老了,但我最近偶然发现了defaultProxy问题,也许它对其他人有帮助。

我使用了安德鲁建议的配置设置。在部署它时,我的客户得到一个错误,说没有足够的权限来设置配置'defaultProxy'。

我不知道为什么我没有权利设置此配置以及如何处理它,我只是删除了它,它仍然有效。所以在VS2013中似乎已经解决了这个问题。

虽然我们正在努力:

    WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");

将默认代理与您的凭据一起使用。如果你想强制不使用代理,只需将DefaultWebProxy设置为null(虽然我不知道是否需要)。

答案 5 :(得分:2)

似乎在一些较新的应用程序中,配置有所不同,正如我在此问题上看到的那样How to authenticate against a proxy when using the HttpClient class?

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
         <proxy usesystemdefault="True" />
    </defaultProxy>
</system.net>

还记录在https://msdn.microsoft.com/en-us/library/dkwyc043.aspx

答案 6 :(得分:1)

在我的部署中,我无法使用app.config嵌入Andrew Webb建议的内容 所以我这样做:

    IWebProxy proxy = WebRequest.GetSystemWebProxy();
    proxy.Credentials = CredentialCache.DefaultCredentials;

    WebClient wc = new WebClient();
    wc.UseDefaultCredentials = true;
    wc.Proxy = proxy;

以防您想检查我的IE设置:

enter image description here

答案 7 :(得分:0)

这是新建议的方法。

WebRequest.GetSystemWebProxy();

答案 8 :(得分:0)

此处的大多数答案都使用不推荐使用的API。在Powershell 5/6/7中执行此操作的新方法是:

[System.Net.WebRequest]::GetSystemWebProxy().Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;

您可以将以上行放入Powershell 5和Powershell 6/7 $ Profile.AllUsersAllHosts。

答案 9 :(得分:-3)

在某些系统中需要设置null属性代理:

Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Dim request As WebRequest = WebRequest.Create(sRemoteFileURL) request.Proxy =没什么

这是一个错误。

相关问题