287 votos

¿Cómo urlencode sin usar System.Web?

Estoy tratando de escribir una aplicación cliente de Windows que llama a un sitio web para los datos. Para mantener la instalación a un mínimo que estoy tratando de utilizar sólo dlls en el perfil de cliente NET Framework . El problema es que tengo que urlencode algunos parámetros, ¿hay una manera fácil de hacer esto sin importar System.Web.dll que no forma parte del Cliente Pofile?

289voto

ToddBFisher Puntos 5011

System.Uri.EscapeUriString() puede ser problemático con ciertos personajes, para mí fue un / libra signo "#" número en la cadena.

Si eso es un problema para usted, trate de:

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

En lugar de ello.

He aquí una pregunta de respuesta SO que explica la diferencia:

¿cuál es la diferencia entre EscapeUriString y EscapeDataString

216voto

Thymine Puntos 2198

Sólo para el formato me estoy presentando esto como una respuesta.

No podía encontrar ninguna buenos ejemplos comparando así:

string testString = "http://test# space 123/text?var=val&another=two";
Console.WriteLine("UrlEncode:         " + System.Web.HttpUtility.UrlEncode(testString));
Console.WriteLine("EscapeUriString:   " + Uri.EscapeUriString(testString));
Console.WriteLine("EscapeDataString:  " + Uri.EscapeDataString(testString));
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+"));

Console.WriteLine("HtmlEncode:        " + System.Web.HttpUtility.HtmlEncode(testString));
Console.WriteLine("UrlPathEncode:     " + System.Web.HttpUtility.UrlPathEncode(testString));

Salidas:

UrlEncode:         http%3a%2f%2ftest%23+space+123%2ftext%3fvar%3dval%26another%3dtwo
EscapeUriString:   http://test#%20space%20123/text?var=val&another=two
EscapeDataString:  http%3A%2F%2Ftest%23%20space%20123%2Ftext%3Fvar%3Dval%26another%3Dtwo
EscapeDataReplace: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo

HtmlEncode:        http://test# space 123/text?var=val&another=two
UrlPathEncode:     http://test#%20space%20123/text?var=val&another=two

Así, Uri.EscapeDataString con un .Replace("%20", "+") parece replicar HttpUtility.UrlEncode para todos los personajes principales a usted le encuentro.
Y EscapeUriString mantendrá un uri válido de cadena, lo que provoca que se use la cantidad de texto simple caracteres como sea posible.

Saltos De Línea Todas ellas listadas aquí otro que HttpUtility.HtmlEncode convertirá "\n\r" a %0a%0d o %0A%0D

Por favor, siéntase libre de editar y añadir nuevos personajes a mi cadena de prueba, o dejarlos en los comentarios y voy a editar.

52voto

Matthew Manela Puntos 9610

Usted puede utilizar

Uri.EscapeUriString (ver http://msdn.microsoft.com/en-us/library/system.uri.escapeuristring.aspx )

15voto

Sprague Puntos 903

Hay una versión utilizable perfil de cliente, clase System.Net.WebUtility, presente en el perfil del cliente System.dll. Aquí está la MSDN Enlace:

WebUtility

8voto

Darin Dimitrov Puntos 528142

He aquí un ejemplo de envío de una petición POST que codifica correctamente parámetros utilizando application/x-www-form-urlencoded Tipo de contenido:

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X