64 Stimmen

Wie kann ich den Standard-Proxy so einstellen, dass er Standard-Anmeldedaten verwendet?

Der folgende Code funktioniert bei mir:

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

Leider, WebProxy.GetDefaultProxy() ist veraltet. Was sollte ich sonst tun?

(die Verwendung von app.config zum Festlegen der defaultProxy-Einstellungen ist in meinem Einsatz nicht erlaubt)

1 Stimmen

Siehe wir haben zwei Möglichkeiten, Proxy in .net-Anwendung zu verwenden. Die erste Möglichkeit ist die Verwendung von Proxy-Einstellungen in web.config. Die zweite Möglichkeit ist die Verwendung der webproxy Klasse im Code. In web.config können Sie keine Netzwerk-Anmeldeinformationen (Benutzer und Passwort) verwenden. Aber im Code können Sie Anmeldeinformationen verwenden. Sie können hier mehr über Proxy erfahren - goo.gl/bLDAHp

102voto

Bellarmine Head Punkte 3089

Für diejenigen, die im Gegensatz zu Brian Genisio, sind in der Lage sind, den Inhalt der Konfigurationsdatei ihrer Anwendung festzulegen: - tun Sie nichts im Code. Fügen Sie dies stattdessen zu Ihrer app.config / web.config hinzu.

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

Die Standardeinstellung für die Verwendung der Standard-Anmeldeinformationen sollte wirklich "true" sein. Ich habe gesehen, dass dieses Problem so viele Leute verwirrt - Entwickler, Benutzer, IT-Mitarbeiter.

Weitere Informationen finden Sie hier:- http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

UPDATE: Ich habe diese Frage/Idee für Microsoft erstellt, um den Standardwert von useDefaultCredentials von false auf true zu ändern, damit dieses ganze Problem verschwindet und .NET-Anwendungen "einfach funktionieren"; bitte stimmen Sie dafür, wenn Sie zustimmen:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth

1 Stimmen

Ich bin mir nicht sicher, ob Sie meinen ursprünglichen Beitrag gesehen haben, aber ich hatte angegeben, dass die Verwendung von app.config in meinem Einsatz nicht erlaubt war... sonst hätte ich das getan.

21 Stimmen

Ich weiß, Brian, aber auf Ihre Frage "Wie kann ich den Standard-Proxy so einstellen, dass er die Standard-Anmeldeinformationen verwendet?", denke ich, dass meine Antwort vielen Leuten helfen wird, da die meisten Leute in der Lage sein werden, den Inhalt ihrer Konfigurationsdatei festzulegen.

1 Stimmen

Grundsätzlich ist Microsofts Standardeinstellung "false" falsch und hat für viel Verwirrung gesorgt und tut es auch weiterhin. Nicht viele Leute wissen, wie man das Problem beheben kann, weder im Code noch in der Konfiguration - ich weiß das aus eigener Erfahrung. Wenn Sie einverstanden sind, stimmen Sie bitte für meinen "User Voice"-Vorschlag, dies in zukünftigen Versionen von .NET zu ändern; den Link finden Sie oben. Vielen Dank!

57voto

Martin Hollingsworth Punkte 7119

Ab .NET 2.0 sollten Sie dies nicht mehr tun müssen. Wenn Sie die Proxy-Eigenschaft nicht explizit für eine Web-Anforderung festlegen, wird der Wert des statischen WebRequest.DefaultWebProxy verwendet. Wenn Sie den Proxy ändern möchten, der von allen nachfolgenden WebRequests verwendet wird, können Sie diese statische Eigenschaft DefaultWebProxy festlegen.

Das Standardverhalten von WebRequest.DefaultWebProxy besteht darin, die gleichen zugrunde liegenden Einstellungen wie im Internet Explorer zu verwenden.

Wenn Sie Folgendes verwenden wollten unterschiedliche Proxy-Einstellungen auf den aktuellen Benutzer zu übertragen, müssten Sie den 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);

Sie sollten auch bedenken, dass das Objektmodell für Proxys das Konzept beinhaltet, dass der Proxy je nach Zielhostname unterschiedlich sein kann. Dies kann bei der Fehlersuche und der Überprüfung der Eigenschaft webRequest.Proxy für etwas Verwirrung sorgen. Aufruf von

webRequest.Proxy.GetProxy(new Uri("http://google.com.au")) um die tatsächlichen Details des zu verwendenden Proxyservers zu sehen.

Es scheint eine Debatte darüber zu geben, ob man die webRequest.Proxy o WebRequest.DefaultWebProxy = null um die Verwendung eines Proxys zu verhindern. Das scheint bei mir gut zu funktionieren, aber Sie könnten es auch so einstellen new DefaultProxy() ohne Parameter, um das gewünschte Verhalten zu erreichen. Eine andere Sache, die zu überprüfen ist, ist, dass wenn ein Proxy-Element in der Konfigurationsdatei Ihrer Anwendung vorhanden ist, wird das .NET Framework NICHT verwenden Sie die Proxy-Einstellungen im Internet Explorer.

Der Artikel im MSDN Magazine Entlastung der Benutzer durch automatische Konfiguration in .NET gibt weitere Einzelheiten darüber, was unter der Haube passiert.

1 Stimmen

Ich stimme zu, dass es sich so anfühlt, als ob ich das nicht tun müsste, aber ich muss es tun. Wenn ich dies nicht tue, erhalte ich einen 407-Fehler bei der Standard-Proxy-Authentifizierung. Wenn ich dies TUN, dann kann mein Client durch den Proxy erhalten.

0 Stimmen

Ist es möglich, dass Sie ein <proxy>-Element in Ihrer .config-Datei haben? Wenn ja, entfernen Sie es und versuchen Sie es erneut.

0 Stimmen

Die Einstellung in der Config-Datei war das einzige, was es zum Funktionieren brachte... aber ich habe nur damit herumgespielt. Ich habe in meiner Umgebung überhaupt keinen Zugriff auf die .config-Datei, daher ist das für mich keine Option.

19voto

Dadurch wird die DefaultWebProxy um Standard-Anmeldeinformationen zu verwenden, ähnlich wie bei der Verwendung von UseDefaultCredentials = true .

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

Daher todo neu erstellt WebRequest Instanzen werden den Standard-Proxy verwenden, der so konfiguriert wurde, dass er die Standard-Anmeldeinformationen des Proxys verwendet.

2 Stimmen

Dies ist die einzige Antwort, die mir bei meinem Problem geholfen hat. Es tut im Wesentlichen, was die akzeptierte Antwort tut, aber ohne die app.config. In unserem winrt windows8.1 app können wir nicht app.config in der Bereitstellung hinzufügen, es bricht die app aus irgendeinem Grund.

5voto

André Punkte 51

Sie können Reflection verwenden, um die UseDefaultCredentials -Eigenschaft von Code auf "wahr"

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;

3voto

Daniel Weber Punkte 41

In einigen neueren Anwendungen scheint die Konfiguration anders zu sein, wie ich in dieser Frage gesehen habe Wie authentifiziert man sich gegenüber einem Proxy, wenn man die HttpClient-Klasse verwendet?

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

Auch dokumentiert auf https://msdn.microsoft.com/en-us/library/dkwyc043.aspx

0 Stimmen

Wenn ich diesen Code in meine App.Config einfüge, bekomme ich einen Absturz in KERNELBASE.dll ohne Fehlermeldung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X