web-dev-qa-db-fra.com

Comment encoder des chaînes URL en C #

Comment pouvons-nous encoder une chaîne en utilisant la norme URL (RFC 1738) en C #?

L'outil en ligne suivant convertit les chaînes en utilisant cette norme http://www.freeformatter.com/url-encoder.html

Un exemple de la chaîne que je veux convertir est test(brackets) et la chaîne encodée devrait ressembler à:

test%28brackets%29
12
rumi

Selon RFC 1738 :

Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
reserved characters used for their reserved purposes may be used
unencoded within a URL.

Ni HttpUtility.UrlEncode ni WebUtility.UrlEncode codera ces caractères puisque la norme indique les parenthèses () peut être utilisé non codé.

Je ne sais pas pourquoi le RL Encoder/Decoder que vous avez lié les encode car il les répertorie également en tant que caractère pouvant être utilisé dans une URL.

7
Dirk

Uri.EscapeDataString fait ce que vous voulez. Voir MSDN .

17
Thomas Hetzer

Uri.EscapeDataString convertira la chaîne en utilisant les standards Uri, ce qui n'est pas conforme à la RFC 1738.

RFC 1738 est une ancienne norme URL.
Je l'ai accompli en utilisant FormUrlEncodedContent :

data = new List<KeyValuePair<string, string>>();
data.Add(new KeyValuePair<string, string>("key", "value"));

var payloadBody = await new FormUrlEncodedContent(data).ReadAsStringAsync();

Si vous n'avez pas besoin d'un corps d'URL codé , vous devez probablement tromper avec la clé/valeur f.e. laissez la valeur vide.

0
Genfood