The following code works for me:
var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = webProxy;
Unfortunately, WebProxy.GetDefaultProxy()
is deprecated. What else should I be doing?
(using app.config to set the defaultProxy settings is not allowed in my deployment)
This thread is old, but I just recently stumbled over the defaultProxy issue and maybe it helps others.
I used the config setting as Andrew suggested. When deploying it, my customer got an error saying, there weren't sufficient rights to set the configuration 'defaultProxy'.
Not knowing why I do not have the right to set this configuration and what to do about it, I just removed it and it still worked. So it seems that in VS2013 this issue is fixed.
And while we're at it:
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");
uses the default proxy with your credentials. If you want to force not using a proxy just set the DefaultWebProxy to null (though I don't know if one wants that).
You may use Reflection to set the UseDefaultCredentials
-Property from Code to "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;
Is need in some systems set null the Proxy proprerty:
Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Dim request As WebRequest = WebRequest.Create(sRemoteFileURL) request.Proxy = Nothing
It's a bug.
Seems like in some newer Application the Configuration is different, as i've seen on this Question How to authenticate against a proxy when using the HttpClient class?
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
Also documented on https://msdn.microsoft.com/en-us/library/dkwyc043.aspx
This will force the DefaultWebProxy
to use default credentials, similar effect as done through UseDefaultCredentials = true
.
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
Hence all newly created WebRequest
instances will use default proxy which has been configured to use proxy's default credentials.
You may use Reflection to set the UseDefaultCredentials
-Property from Code to "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;
This thread is old, but I just recently stumbled over the defaultProxy issue and maybe it helps others.
I used the config setting as Andrew suggested. When deploying it, my customer got an error saying, there weren't sufficient rights to set the configuration 'defaultProxy'.
Not knowing why I do not have the right to set this configuration and what to do about it, I just removed it and it still worked. So it seems that in VS2013 this issue is fixed.
And while we're at it:
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");
uses the default proxy with your credentials. If you want to force not using a proxy just set the DefaultWebProxy to null (though I don't know if one wants that).
Most of the answers here use deprecated APIs. New way of doing this in Powershell 5/6/7 is:
[System.Net.WebRequest]::GetSystemWebProxy().Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
You can put the above line in your Powershell 5 and Powershell 6/7 $Profile.AllUsersAllHosts.
This is the new suggested method.
WebRequest.GetSystemWebProxy();
For those who, unlike Brian Genisio, are able to set the contents of their application's config file:- don't do anything in code. Instead add this to your app.config / web.config.
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
Really and truly the default for using the default credentials should be "true"; I've seen this issue confuse so many people - developers, users, IT guys.
For more info see here:- http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx
UPDATE: I've created this issue/idea for Microsoft to change the default of useDefaultCredentials from false to true so that this whole problem goes away and .NET apps "just work"; please vote it up if you agree:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth
This is the new suggested method.
WebRequest.GetSystemWebProxy();
In my deployment I can't use app.config neither to embed what Andrew Webb suggested.
So I'm doing this:
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Proxy = proxy;
Just in case you want to check my IE settings:
Most of the answers here use deprecated APIs. New way of doing this in Powershell 5/6/7 is:
[System.Net.WebRequest]::GetSystemWebProxy().Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
You can put the above line in your Powershell 5 and Powershell 6/7 $Profile.AllUsersAllHosts.
This will force the DefaultWebProxy
to use default credentials, similar effect as done through UseDefaultCredentials = true
.
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
Hence all newly created WebRequest
instances will use default proxy which has been configured to use proxy's default credentials.
In my deployment I can't use app.config neither to embed what Andrew Webb suggested.
So I'm doing this:
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Proxy = proxy;
Just in case you want to check my IE settings:
Is need in some systems set null the Proxy proprerty:
Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Dim request As WebRequest = WebRequest.Create(sRemoteFileURL) request.Proxy = Nothing
It's a bug.
For those who, unlike Brian Genisio, are able to set the contents of their application's config file:- don't do anything in code. Instead add this to your app.config / web.config.
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
Really and truly the default for using the default credentials should be "true"; I've seen this issue confuse so many people - developers, users, IT guys.
For more info see here:- http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx
UPDATE: I've created this issue/idea for Microsoft to change the default of useDefaultCredentials from false to true so that this whole problem goes away and .NET apps "just work"; please vote it up if you agree:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth
Source: Stackoverflow.com