64 votes

Comment dois-je configurer le proxy par défaut pour utiliser les informations d'identification par défaut?

Le code suivant fonctionne pour moi:

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

Malheureusement, WebProxy.GetDefaultProxy() est obsolète. Que dois-je faire?

(utilisation de l'app.config pour définir la defaultProxy paramètres n'est pas autorisé dans mon déploiement)

102voto

Andrew Webb Points 1002

Pour ceux qui, contrairement à Brian Genisio, sont en mesure de définir le contenu de leur demande de fichier de configuration:- ne pas faire n'importe quoi dans le code. Au lieu d'ajouter ceci à votre application.config / web.config.

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

Vraiment la valeur par défaut pour utiliser les informations d'identification par défaut doit être "vrai"; j'ai vu ce problème de confondre tant de gens, les développeurs, les utilisateurs, les gars.

Pour plus d'infos, voir ici:- http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

Mise à JOUR: j'ai créé cette question/idée pour Microsoft de modifier la valeur par défaut de useDefaultCredentials de false à true pour que tout ce problème s'en va et .NET applications "fonctionne"; s'il vous plaît voter, si vous l'acceptez:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth

57voto

Martin Hollingsworth Points 3662

Partir de .NET 2.0, vous ne devriez pas avoir à le faire. Si vous ne définissez pas explicitement le Proxy de propriété sur une requête web, il utilise la valeur de la statique WebRequest.DefaultWebProxy. Si vous vouliez changer le proxy utilisé par tous les WebRequests, vous pouvez définir cette statique DefaultWebProxy de la propriété.

Le comportement par défaut de WebRequest.DefaultWebProxy est d'utiliser les mêmes paramètres utilisés par Internet Explorer.

Si vous souhaitez utiliser différents paramètres de proxy à l'utilisateur actuel, puis vous auriez besoin de code

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

ou

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

Vous devez également vous rappeler le modèle d'objet pour les proxys comprend le concept que le proxy peut être différent en fonction de la destination hôte. Cela peut rendre les choses un peu déroutant lorsque le débogage et la vérification de la propriété de webRequest.Proxy. Appel

webRequest.Proxy.GetProxy(new Uri("http://google.com.au")) de voir les détails du serveur proxy à utiliser.

Il semble y avoir un débat quant à savoir si vous pouvez configurer webRequest.Proxy ou WebRequest.DefaultWebProxy = null à empêcher l'utilisation de proxy. Cela semble fonctionner OK pour moi, mais vous pouvez l'installer à l' new DefaultProxy() sans paramètres pour obtenir le comportement requis. Une autre chose à vérifier est que si un élément proxy existe dans vos applications fichier de configuration, la .NET Framework va PAS utiliser les paramètres de proxy dans Internet Explorer.

L'article de MSDN Magazine de Prendre la Charge des Utilisateurs avec la Configuration Automatique .NET donne plus de détails de ce qui se passe sous le capot.

18voto

Similaire avec Andrew Webb réponse, mais le faire par code au lieu de config-file :

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

Cela va forcer l' DefaultWebProxy à utiliser les informations d'identification par défaut (similaire à l' UseDefaultCredentials = true. Par conséquent, tous les WebRequest va utiliser la valeur par défaut de proxy qui a été configuré pour utiliser le proxy par défaut d'informations d'identification.

un merci spécial à jyzuz, votre réponse m'inspire :)

5voto

André Points 21

Vous pouvez utiliser la Réflexion pour définir l' UseDefaultCredentials-Propriété à partir de Code à "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;

2voto

jens d Points 1

Ce fil est vieux, mais je viens de tombé sur le defaultProxy question et peut-être qu'il aide les autres.

J'ai utilisé le paramétrage de la configuration d'Andrew, a suggéré. Lors du déploiement, mon client a eu une erreur de dire, il n'y avait pas de droits suffisants pour définir la configuration 'defaultProxy'.

Ne sachant pas pourquoi je n'ai pas le droit de définir cette configuration et quoi faire à ce sujet, j'ai juste enlevé et il fonctionnait toujours. Il semble donc que dans VS2013 ce problème est résolu.

Et pendant que nous y sommes:

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

utilise le proxy par défaut avec vos informations d'identification. Si vous voulez forcer la non-utilisation d'un proxy, il suffit de régler le DefaultWebProxy à null (mais je ne sais pas si l'on veut que).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X