Fehler in C#-Webrequest

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:

1
2
3
/* 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:

Über den Autor Danny Sotzny

Hallo, ich bin Danny Sotzny und bin Software- entwickler und Fotograf. Dabei beschäftige ich mich mit aktuellen Technologien und bekannten Problemen. Schwerpunkte setze ich bei der Webentwicklung (PHP/JS) und der Software- entwicklung mit .NET (C#). Der Blog dient für mich selbst als Gedächtnishilfe für typische und alltägliche Probleme, aber auch persönliche Erlebnisse werden veröffentlicht. Ich betreibe zusätzlich noch Foto-Sotzny.de für meine Fotografien und sotzny.net, was meine Webseite für die Softwareentwicklung ist.

Leave a Reply

See also:

%d Bloggern gefällt das: