Como devo definir o proxy padrão para usar as credenciais padrão?

O código a seguir funciona para mim:

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

Infelizmente, WebProxy.GetDefaultProxy() está obsoleto. O que mais eu deveria estar fazendo?

(usando app.config para definir as configurações defaultProxy não é permitido na minha implantação)

Do .NET 2.0, você não precisa fazer isso. Se você não definir explicitamente a propriedade Proxy em uma solicitação da web, ela usará o valor do WebRequest.DefaultWebProxy estático. Se você quiser alterar o proxy que está sendo usado por todos os WebRequests subseqüentes, você pode definir esta propriedade estática DefaultWebProxy.

O comportamento padrão do WebRequest.DefaultWebProxy é usar as mesmas configurações subjacentes usadas pelo Internet Explorer.

Se você quisesse usar configurações de proxy diferentes para o usuário atual, precisaria codificar

 WebRequest webRequest = WebRequest.Create("http://stackoverflow.com/"); webRequest.Proxy = new WebProxy("http://proxyserver:80/",true); 

ou

 WebRequest.DefaultWebProxy = new WebProxy("http://proxyserver:80/",true); 

Você também deve lembrar que o modelo de object para proxies inclui o conceito de que o proxy pode ser diferente dependendo do nome do host de destino. Isso pode tornar as coisas um pouco confusas ao depurar e verificar a propriedade do webRequest.Proxy. Ligar

webRequest.Proxy.GetProxy(new Uri("http://google.com.au")) para ver os detalhes reais do servidor proxy que seria usado.

Parece haver algum debate sobre se você pode definir webRequest.Proxy ou WebRequest.DefaultWebProxy = null para impedir o uso de qualquer proxy. Isso parece funcionar bem para mim, mas você pode configurá-lo para o new DefaultProxy() sem parâmetros para obter o comportamento necessário. Outra coisa a verificar é que, se um elemento de proxy existir no arquivo de configuração de aplicativos, o .NET Framework NÃO usará as configurações de proxy no Internet Explorer.

O artigo da MSDN Magazine Tire os usuários do Burden Off com configuração automática no .NET fornece mais detalhes sobre o que está acontecendo sob o capô.

Para aqueles que, ao contrário de Brian Genisio, são capazes de definir o conteúdo do arquivo de configuração do seu aplicativo: – não faça nada no código. Em vez disso, adicione isso ao seu app.config / web.config.

    

Realmente e verdadeiramente o padrão para usar as credenciais padrão deve ser “true”; Eu vi esse problema confundir tantas pessoas – desenvolvedores, usuários, pessoal de TI.

Para mais informações, consulte aqui: – http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

ATUALIZAÇÃO: Eu criei este problema / idéia para a Microsoft para alterar o padrão de useDefaultCredentials de false para true para que todo esse problema desapareça e aplicativos .NET “apenas funcionem”; por favor vote se você concordar:
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; 

Isso forçará o DefaultWebProxy a usar credenciais padrão, efeito semelhante ao feito por UseDefaultCredentials = true .

Portanto, todas as instâncias WebRequest recém-criadas usarão o proxy padrão que foi configurado para usar as credenciais padrão do proxy.

Você pode usar o Reflection para definir o UseDefaultCredentials -Property do código para “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; 

Este tópico é antigo, mas recentemente eu tropecei no problema defaultProxy e talvez isso ajude os outros.

Eu usei a configuração como Andrew sugeriu. Ao implantá-lo, meu cliente recebeu um erro dizendo que não havia direitos suficientes para definir a configuração ‘defaultProxy’.

Não sabendo porque eu não tenho o direito de definir esta configuração e o que fazer sobre isso, eu apenas a removi e ainda funcionou. Então parece que no VS2013 esse problema é fixo.

E enquanto estamos nisso:

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

usa o proxy padrão com suas credenciais. Se você quiser forçar a não utilização de um proxy, basta definir o DefaultWebProxy como nulo (embora eu não saiba se alguém deseja isso).

Parece que em algum aplicativo mais recente a configuração é diferente, como eu já vi nesta pergunta Como autenticar contra um proxy ao usar a class HttpClient?

      

Também documentado em https://msdn.microsoft.com/pt-br/library/dkwyc043.aspx

Na minha implantação, não posso usar o app.config nem incorporar o que Andrew Webb sugeriu.
Então estou fazendo isso:

  IWebProxy proxy = WebRequest.GetSystemWebProxy(); proxy.Credentials = CredentialCache.DefaultCredentials; WebClient wc = new WebClient(); wc.UseDefaultCredentials = true; wc.Proxy = proxy; 

Apenas no caso de você querer verificar minhas configurações do IE:

insira a descrição da imagem aqui

Este é o novo método sugerido.

 WebRequest.GetSystemWebProxy(); 

É necessário em alguns sistemas definidos nulos a propriedade Proxy:

Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Solicitar Dim Como WebRequest = WebRequest.Create (sRemoteFileURL) request.Proxy = Nothing

É um bug.