Hallo,
ich habe ein Programm mit dem ich einen Webrequest durchführe. Dazu möchte ich die Proxy Einstellungen des Internet Explorers vewenden und auch die Credentials des angemeldeten Users.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Timeout = timeout;
request.UserAgent = userAgent;
request.PreAuthenticate = true;
if (manualCredentials)
{
request.Proxy.Credentials = this.proxy_credentials;
}
else
{
request.UseDefaultCredentials = true;
}
HttpWebResponse res = (HttpWebResponse)request.GetResponse();
Problem 1: Hat der Anwender einen Proxy, so wirft die GetResponse-Methode eine Exception mit HTTP Statuscode 407 Proxy Authentifizierung notwendig. Nun frage ich mich warum der User nicht mitgegeben wird (default credentials)?
Problem 2: Aktuell fange ich den Fehler ab und zeige einen Dialog zur Eingabe von Name und Passwort an. Dann führe ich einen weiteren Request durch und setze die credentials manuell, bekomme dann aber einen HTTP Statuscode 400 (Bad Request - Die Anfrage-Nachricht war fehlerhaft aufgebaut).
Wie kann ich am einfachsten die Einstellungen des Internet Explorers mit dem angemeldeten Anwender verwenden?
Danke für eure Hilfe.
Amosius
Hallo,
versuch mal in der App.config (oder Web.config) folgeneden Eintrag:
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo MarsStein,
habe ich getestet. Das Anwendungsverhalten hat sich leider nicht verändert.
Weitere Hinweise?
Grüße
Amosius
MSDN: WebRequest.GetSystemWebProxy-Methode
MSDN: WebRequest.Credentials-Eigenschaft in Kombination mit CredentialCache.DefaultCredentials-Eigenschaft
Alles sauber dokumentiert und einfach zu finden.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke für eure Hinweise,
ich teste das beim Kunden und gebe euch eine Rückmeldung wie
es gelaufen ist.
Grüße
Amosius
Hallo,
vielen Dank an alle, es hat funktioniert und ich habe nun auch
die Hürde gefunden.
Mein aktueller Code mit dem es funktioniert:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Timeout = timeout;
request.UserAgent = userAgent;
request.PreAuthenticate = true;
request.UseDefaultCredentials = true;
request.Proxy = WebRequest.GetSystemWebProxy();
if (null == proxy_credentials)
{
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
}
else
{
request.Proxy.Credentials = this.proxy_credentials;
}
Bislang habe ich immer die DefaultCredentials
für den request selbst gesetzt, aber nicht für den proxy im request. Nun setze ich
beides, einmal über UseDefaultCredentials und im Proxy nochmal. Letzter Schritt
hatte bislang gefehlt.
Danke an alle.
Amosius