2011-02-23 33 views
29

Tengo una aplicación de Silverlight que está construyendo una URL. Esta URL es una llamada a un servicio basado en REST. Este servicio espera un único parámetro que represente una ubicación. La ubicación es en forma de "ciudad, estado". Para construir este URL, Voy a llamar al siguiente código:Parámetros de codificación para una URL

string url = "http://www.domain.com/myService.svc/"; 
url += HttpUtility.UrlEncode(locationTextBox.Text); 

Si un usuario introduce "Chicago, IL" en locationTextBox, el resultado es el siguiente:

http://www.domain.com/myService.svc/chicago%2c+il 

En realidad, sin embargo, yo esperaba que pareciera la URL;

http://www.domain.com/myService.svc/chicago,%20il 

Al probar mi servicio a través de la URL del navegador, el que estoy esperando funciona. Sin embargo, la URL que se genera no está funcionando. ¿Qué estoy haciendo mal?

Respuesta

6

Intente utilizar el método UrlPathEncode(). Ver el comentario en: http://msdn.microsoft.com/en-us/library/h10z5byc.aspx

Cita:

puede codificar una URL utilizando el método UrlEncode de() o el método UrlPathEncode(). Sin embargo, los métodos arrojan resultados diferentes. El método UrlEncode() convierte cada espacio caracteres en un carácter más (+). El método UrlPathEncode() convierte cada carácter de espacio en la cadena "% 20", que representa un espacio en notación hexadecimal . Utilice el método UrlPathEncode() cuando codifique la parte de ruta de una URL para garantizar una URL decodificada consistente, independientemente de qué plataforma o el explorador realice la decodificación.

0

La apuesta más segura es utilizar la biblioteca AntiXss. Tiene más versiones estándar (y seguras) para codificar contenidos para varios propósitos (como códigos de URL, códigos Html y HtmlAttribute, y más). existe la versión anterior de 3.1 disponible para descargar desde el sitio de MS (http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09), que funcionará con versiones anteriores de .NET, y la nueva en http://wpl.codeplex.com/

Cuestiones relacionadas