C # -Webanfrage mit POST-Kodierungsfrage

8

Auf der MSDN-Site gibt es ein Beispiel für einen C # -Code , der zeigt, wie man vorgeht eine Web-Anfrage mit POST-Daten. Hier ist ein Auszug aus diesem Code:

%Vor%

Die mit (*) markierte Zeile ist die Zeile, die mich verwirrt. Sollten die Daten nicht mit der UrlEncode-Methode und nicht mit UTF8 codiert werden? Ist das nicht application/x-www-form-urlencoded impliziert?

    
rlandster 02.06.2010, 22:46
quelle

2 Antworten

11

Der Beispielcode ist irreführend, da ContentType auf application / x-www-form-urlencoded gesetzt ist, der eigentliche Inhalt jedoch reiner Text ist. application / x-www-form-urlencoded ist ein String wie dieser:

%Vor%

Die UrlEncode-Funktion wird verwendet, um spezielle Zeichen wie '& amp;' und '=', so dass ein Parser sie nicht als Syntax betrachtet. Sie benötigt eine Zeichenfolge (Medientyp text / plain) und gibt eine Zeichenfolge zurück (Medientyp application / x-www-form-urlencoded).

Encoding.UTF8.GetBytes wird verwendet, um den String (Medientyp application / x-www-form-urlencoded in unserem Fall) in ein Array von Bytes zu konvertieren, was die WebRequest API erwartet.

    
Max Toro 02.06.2010, 23:01
quelle
9

Wie Max Toro angegeben hat, sind die Beispiele auf der MSDN-Site falsch: Ein korrekter Formular-POST erfordert, dass die Daten URL-codiert sind. Da die Daten im MSDN-Beispiel keine Zeichen enthalten, die durch die Codierung geändert würden, sind sie in gewisser Weise bereits codiert.

Der korrekte Code würde einen System.Web.HttpUtility.UrlEncode -Aufruf für die Namen und Werte jedes Name / Wert-Paares haben, bevor sie in die name1=value1&name2=value2 -Zeichenkette kombiniert werden.

Diese Seite war hilfreich: Ссылка

    
rlandster 03.06.2010 18:14
quelle

Tags und Links