Question

Je suis en train d'écrire une application client Windows qui appelle un site Web pour les données. Pour garder l'installation à un minimum que je suis en train d'utiliser seulement dll dans le .NET Framework client Profil . Le problème est que je dois UrlEncode certains paramètres, est-il un moyen facile de faire cela sans importer System.Web.dll qui ne fait pas partie du? Pofile client

Était-ce utile?

La solution

System.Uri.EscapeUriString() peut être problématique avec certains personnages, ce fut pour moi un numéro / livre « # » signe dans la chaîne.

Si tel est un problème pour vous, essayez:

System.Uri.EscapeDataString() //Works excellent with individual values

Voici une réponse question SO qui explique la différence:

Quelle est la différence entre EscapeUriString et EscapeDataString?

et recommande à l'utilisation Uri.EscapeDataString() dans tous les aspects.

Autres conseils

Dans .Net 4.5+ utilisation https://stackoverflow.com/a/11236038/555798

sauts de ligne Tous les énumérés ici (autres que HttpUtility.HtmlEncode) convertira "\n\r" en %0a%0d ou %0A%0D

S'il vous plaît ne hésitez pas à modifier cela et ajouter de nouveaux personnages à ma chaîne de test, ou les laisser dans les commentaires et je vais le modifier.

Les réponses ici sont très bons, mais encore insuffisante pour moi.

J'ai écrit une petite boucle qui compare Uri.EscapeUriString avec Uri.EscapeDataString pour tous les caractères de 0 à 255.

NOTE:. Les deux fonctions ont intégré dans l'intelligence que les caractères ci-dessus 0x80 sont d'abord UTF-8 codé puis codé pour cent

Voici le résultat:

******* Different *******

'#' -> Uri "#" Data "%23"
'$' -> Uri "$" Data "%24"
'&' -> Uri "&" Data "%26"
'+' -> Uri "+" Data "%2B"
',' -> Uri "," Data "%2C"
'/' -> Uri "/" Data "%2F"
':' -> Uri ":" Data "%3A"
';' -> Uri ";" Data "%3B"
'=' -> Uri "=" Data "%3D"
'?' -> Uri "?" Data "%3F"
'@' -> Uri "@" Data "%40"


******* Not escaped *******

'!' -> Uri "!" Data "!"
''' -> Uri "'" Data "'"
'(' -> Uri "(" Data "("
')' -> Uri ")" Data ")"
'*' -> Uri "*" Data "*"
'-' -> Uri "-" Data "-"
'.' -> Uri "." Data "."
'_' -> Uri "_" Data "_"
'~' -> Uri "~" Data "~"

'0' -> Uri "0" Data "0"
.....
'9' -> Uri "9" Data "9"

'A' -> Uri "A" Data "A"
......
'Z' -> Uri "Z" Data "Z"

'a' -> Uri "a" Data "a"
.....
'z' -> Uri "z" Data "z"

******* UTF 8 *******

.....
'Ò' -> Uri "%C3%92" Data "%C3%92"
'Ó' -> Uri "%C3%93" Data "%C3%93"
'Ô' -> Uri "%C3%94" Data "%C3%94"
'Õ' -> Uri "%C3%95" Data "%C3%95"
'Ö' -> Uri "%C3%96" Data "%C3%96"
.....

EscapeUriString doit être utilisé pour les URL encodages, alors que EscapeDataString doit être utilisé pour coder par exemple le contenu d'un cookie, parce que les données des cookies ne doivent pas contenir les caractères réservés '=' et ';'.

Il y a un profil de client version utilisable, classe System.Net.WebUtility, présent dans le profil client System.dll. Voici le lien MSDN:

WebUtility

Voici un exemple d'envoyer une requête POST qui code correctement les paramètres en utilisant le type de contenu application/x-www-form-urlencoded:

using (var client = new WebClient())
{
    var values = new NameValueCollection
    {
        { "param1", "value1" },
        { "param2", "value2" },
    };
    var result = client.UploadValues("http://foo.com", values);
}

Pour UrlEncode sans utiliser System.Web:

String s = System.Net.WebUtility.UrlEncode(str);
//fix some different between WebUtility.UrlEncode and HttpUtility.UrlEncode
s = Regex.Replace(s, "(%[0-9A-F]{2})", c => c.Value.ToLowerInvariant());

plus de détails: https: //www.samnoble .co.uk / 2014/05/21 / méfiez-webutility-urlencode-vs-httputility-urlencode /

System.Net.WebUtility.HtmlDecode
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top