C# web demande POST encodage question
Sur le site MSDN il y a un exemple de code C# qui montre comment faire une demande web avec POST ed de données. Voici un extrait du code:
WebRequest request = WebRequest.Create ("http://www.contoso.com/PostAccepter.aspx ");
request.Method = "POST";
string postData = "This is a test that posts this string to a Web server.";
byte[] byteArray = Encoding.UTF8.GetBytes (postData); //(*)
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream ();
dataStream.Write (byteArray, 0, byteArray.Length);
dataStream.Close ();
WebResponse response = request.GetResponse ();
...more...
La ligne marquée (*)
est la ligne qui m'intrigue, c'. Ne pas les données codées à l'aide de la fonction UrlEncode méthode plutôt que l'UTF8? N'est-ce pas application/x-www-form-urlencoded
implique?
OriginalL'auteur rlandster | 2010-06-02
Vous devez vous connecter pour publier un commentaire.
L'exemple de code est trompeur, parce que ContentType est définie à l'application/x-www-form-urlencoded, mais le contenu est du texte brut. application/x-www-form-urlencoded est une chaîne de caractères comme ceci:
La fonction UrlEncode est utilisé pour échapper especial de caractères comme '&' et '=' alors, un analyseur de ne pas les considérer comme de la syntaxe. Il prend une chaîne de caractères (type de média text/plain) et retourne une chaîne de caractères (type de support de l'application/x-www-form-urlencoded).
Encodage.UTF8.GetBytes est utilisé pour convertir la chaîne de caractères (type de support de l'application/x-www-form-urlencoded dans notre cas) dans un tableau d'octets, qu'est ce que le WebRequest API attend.
Martin Smith notes ci-dessus,
application/x-www-form-urlencoded
indique le contenu a été codé de manière spécifique. Comment fonctionne en utilisant l'Encodage.UTF8 remédier à cela?Smith: je Ne sais pas. Suffit d'utiliser la fonction UrlEncode pour encoder les noms et les valeurs, et vous devriez être bien. Je pense que l'exemple utilise UTF8 car c'est ce que les chaînes littérales en C#.
Je suis assez sûr qu'il ne l'est pas et dans le cas où le postdata n'était pas si simple, vous auriez besoin de le coder à l'aide de certains autres services publics. Je n'en suis pas sûr pourquoi vous devez utiliser
Encoding.UTF8.GetBytes
plutôt queEncoding.ASCII.GetBytes
. Edit: je vois Max a posté une possible explication ci-dessus.OriginalL'auteur Max Toro
Max Toro indiqué, les exemples sur le site MSDN sont incorrectes: une forme correcte de la POSTE a besoin de données codées dans l'URL; puisque les données dans la MSDN exemple ne contiennent pas de caractères qui serait modifié par l'encodage, ils sont, en un sens, déjà encodés.
Le bon code serait un
System.Web.HttpUtility.UrlEncode
appel sur les noms et les valeurs de chaque paire nom/valeur avant de les combiner dans lename1=value1&name2=value2
chaîne.Cette page a été utile: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx
OriginalL'auteur rlandster