J'ai une application Silverlight qui construit une URL. Cette URL est un appel à un service basé sur REST. Ce service attend un seul paramètre qui représente un emplacement. L'emplacement est sous la forme de "ville, état". Pour construire cette URL, j'appelle le code suivant:
string url = "http://www.domain.com/myService.svc/";
url += HttpUtility.UrlEncode(locationTextBox.Text);
Si un utilisateur entre "chicago, il" dans locationTextBox, le résultat est le suivant:
http://www.domain.com/myService.svc/chicago%2c+il
En réalité cependant, je m'attendais à ce que l'URL ressemble à ceci;
http://www.domain.com/myService.svc/chicago,%20il
Lors du test de mon service via l'URL du navigateur, celui que j'attends fonctionne. Cependant, l'URL générée ne fonctionne pas. Qu'est-ce que je fais mal?
Je recommanderais Uri . EscapeDataString au lieu d'utiliser HttpUtility fonctions. Voir la discussion dans Server.UrlEncode vs. HttpUtility.UrlEncode .
Essayez d’utiliser la méthode UrlPathEncode () . Consultez les remarques à l’adresse: http://msdn.Microsoft.com/en-us/library/h10z5byc.aspx
Citation:
Vous pouvez coder une URL en utilisant avec le Méthode UrlEncode () ou le Méthode UrlPathEncode (). Cependant, le les méthodes retournent des résultats différents. Le La méthode UrlEncode () convertit chaque espace caractère à un caractère plus (+). Le La méthode UrlPathEncode () convertit chaque fichier caractère d'espacement dans la chaîne "% 20", qui représente un espace dans notation hexadécimale. Utilisez le Méthode UrlPathEncode () lorsque vous codez la portion de chemin d'une URL afin de garantir une URL décodée cohérente, indépendamment de quelle plate-forme ou navigateur effectue le décodage.
Le pari le plus sûr consiste à utiliser la bibliothèque AntiXss. Il a plus de versions standard (et sécurisées) pour encoder le contenu à différentes fins (comme les codes Url, les codes Html et HtmlAttribute, etc.). l’ancienne version 3.1 est disponible au téléchargement sur le site de Microsoft ( http://www.Microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09 ), qui fonctionne avec les anciennes versions .NET et la nouvelle à http://wpl.codeplex.com/