1

Ich versuche, mit REST-API bit.ly mit ihrer modifizierten Version der Standardauthentifizierung zu kommunizieren. Damit dies jedoch funktioniert, muss HttpWebRequest die Anmeldeinformationen bei der ersten Anforderung anhängen. HttpWebRequest sendet jedoch keine Anmeldeinformationen für die erste Anforderung und wartet auf eine 401, bevor Anmeldeinformationen gesendet werden, auch wenn PreAuthenticate auf true festgelegt ist (mit PreAuthenticate) sendet Zugangsdaten für alle nachfolgenden Anfragen)..Net CF 2.0 HttpWebRequest Vorauthentifizierung und Senden von Anmeldeinformationen auf erste Anforderung

habe ich versucht, die folgende HttpWebRequest bekommen den Weg zur Arbeit bit.ly erfordert es:

(1) Schicken Sie die Anfrage im Format http://username:[email protected]/method.

Wird von bit.ly nicht unterstützt (da es sich um eine falsche Implementierung der Standardauthentifizierung handelt, wird nur die Kopfzeile überprüft).

(2) Fügen Sie den Header "Authorization" manuell in die HttpWebRequest ein.

In der .Net-CF nicht möglich, da der Berechtigungsheader geschützt ist und jeder Versuch, einen geschützten Headerwert zu ändern, fehlschlägt und eine ArgumentException auslöst.

(3) Vererben Sie HttpWebRequest oder WebRequest in einer anderen Klasse, um das erforderliche Verhalten zu implementieren.

Nicht möglich, da die HttpWebRequest-Klasse standardmäßig für Serviceanfragen für HTTP- und HTTPS-Schemas registriert ist. Versuche, einen anderen WebRequest-Nachkommen für diese Schemas zu registrieren, schlagen fehl, da doppelte Präfixe nicht zulässig sind.

Also hat jemand irgendwelche Vorschläge?

Antwort

1

Ein Hinweis auf (2). Ich habe die Methode http://blog.kowalczyk.info/article/Forcing-basic-http-authentication-for-HttpWebReq.html verwendet, um einen Autorisierungsheader zu injizieren, und es funktioniert gut in .NET CF 2.0.

public void SetBasicAuthHeader(WebRequest req, String userName, String userPassword) 
{ 
    string authInfo = userName + ":" + userPassword; 
    authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); 
    req.Headers["Authorization"] = "Basic " + authInfo; 
}