J'essaie d'écrire une application client Windows qui appelle un site Web pour les données. Pour garder l'installation au minimum, j'essaie uniquement d'utiliser des DLL dans le profil client .NET Framework . Le problème est que j'ai besoin d'UrlEncode certains paramètres, existe-t-il un moyen facile de le faire sans importer System.Web.dll qui ne fait pas partie du profil client?
c#
.net
urlencode
.net-client-profile
Martin Brown
la source
la source
WebRequest
ouWebClient
. C'est la raison pour laquelle j'ai posé des questions sur ce code particulier, car il y a des choses à faire pour encoder correctement les données url.Réponses:
System.Uri.EscapeUriString()
peut être problématique avec certains caractères, pour moi c'était un signe nombre / livre '#' dans la chaîne.Si cela vous pose problème, essayez:
Voici une réponse à une question SO qui explique la différence:
Quelle est la différence entre EscapeUriString et EscapeDataString?
et recommande d'utiliser
Uri.EscapeDataString()
dans tous les aspects.la source
Uri.EscapeUriString
est en effet très problématique et ne doit pas être utilisé, car il essaie de faire quelque chose (échapper les URI complets) qui est en fait impossible à faire de manière cohérente Voir cette réponse pour une explication détaillée.Dans .Net 4.5+, utilisez
WebUtility
Juste pour le formatage, je soumets ceci comme réponse.
Impossible de trouver de bons exemples pour les comparer:
Les sorties:
Dans .Net 4.5+, utilisez
WebUtility
.UrlEncode
Cela semble se répliquer
HttpUtility.UrlEncode
(avant la v4.0) pour les caractères les plus courants:Uri.EscapeDataString(testString).Replace("%20", "+").Replace("'", "%27").Replace("~", "%7E")
Remarque:
EscapeUriString
conservera une chaîne uri valide, ce qui l'amènera à utiliser autant de caractères en clair que possible.Voir cette réponse pour un tableau comparant les différents encodages:
https://stackoverflow.com/a/11236038/555798
Sauts de ligne Tous les éléments répertoriés ici (autres que
HttpUtility.HtmlEncode
) seront convertis"\n\r"
en%0a%0d
ou%0A%0D
N'hésitez pas à le modifier et à ajouter de nouveaux caractères à ma chaîne de test, ou laissez-les dans les commentaires et je le modifierai.
la source
EscapeDataString
plutôt queEscapeUriString
pendant que nous codions les retours chariot et les sauts de ligne et ceux-ci ont nécessité l'échappement le plus agressif effectué parEscapeDataString
Vous pouvez utiliser
Uri.EscapeUriString (voir http://msdn.microsoft.com/en-us/library/system.uri.escapeuristring.aspx )
la source
Uri.EscapeUriString
. Il ne "comprend" pas les parties qui doivent être encodées, c'est juste une tentative erronée de faire quelque chose (échapper les URI complets) qui est en fait impossible à faire de manière cohérente. Voir cette réponse pour une explication détaillée.Les réponses ici sont très bonnes, mais encore insuffisantes pour moi.
J'ai écrit une petite boucle qui se compare
Uri.EscapeUriString
àUri.EscapeDataString
pour tous les caractères de 0 à 255.REMARQUE: Les deux fonctions ont l'intelligence intégrée que les caractères supérieurs à 0x80 sont d'abord encodés en UTF-8 puis encodés en pourcentage.
Voici le résultat:
EscapeUriString
doit être utilisé pour coder les URL, tandis queEscapeDataString
doit être utilisé pour coder par exemple le contenu d'un cookie, car les données du cookie ne doivent pas contenir les caractères réservés'='
et';'
.la source
Uri.EscapeUriString
, car il est impossible de s'échapper de manière cohérente pour échapper des URI complets. Voir cette réponse pour une explication détaillée.Il existe une version utilisable du profil client, classe System.Net.WebUtility, présente dans le profil client System.dll. Voici le lien MSDN:
WebUtility
la source
Voici un exemple d'envoi d'une demande POST qui code correctement les paramètres à l'aide
application/x-www-form-urlencoded
du type de contenu:la source
Pour UrlEncode sans utiliser System.Web:
plus de détails: https://www.samnoble.co.uk/2014/05/21/beware-webutility-urlencode-vs-httputility-urlencode/
la source
la source