Um aus C# herraus HTTP Anfragen zu senden verwendet man im Allgemeinen die HttpWebRequest (geerbt von WebRequest) Klasse.
Bei einem jetzigen Projekt wo es um eine REST-Schnittstelle geht wird HTTP-Basic Auth zur Authentifizierung genutzt. Und da zeigt sich eine Schwäche bei der der Klasse die Mark von IntelliTechtur beschreibt.
Dabei geht es darum das 2 Requests gesendet werden. Beim 1. Request wird eiskalt die Basic-Auth weg gelassen.. wenn der Webservice nun keinen 4xx (nicht 2xx) sendet würde die Klasse es womöglich nicht nochmal probieren. Aber da der Code kommt gibt es wenige milisekunden später einen 2. mit Basic Auth.
Um dieses Problem zu umgehen empfielt mark den Basic-Auth-Token selbst zu berechnen und als Header mit zu senden:
/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */
byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password);
req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);
und siehe da.. nur noch ein Request..
Echt sinnlos seine Zeit damit zu verschwenden… 🙁
Links: