¿Cómo decodifico un parámetro de URL usando C #?


146

¿Cómo puedo decodificar un parámetro de URL codificado usando C #?

Por ejemplo, tome esta URL:

my.aspx?val=%2Fxyz2F

Respuestas:



288
string decodedUrl = Uri.UnescapeDataString(url)

o

string decodedUrl = HttpUtility.UrlDecode(url)

La URL no está completamente decodificada con una llamada. Para decodificar completamente, puede llamar a uno de estos métodos en un bucle:

private static string DecodeUrlString(string url) {
    string newUrl;
    while ((newUrl = Uri.UnescapeDataString(url)) != url)
        url = newUrl;
    return newUrl;
}

13
Uri.UnescapeDataString (url)
— thanx

@ogi Gracias por eso! ¡No sabía que no funcionaba completamente con solo una llamada! ¡Corrí Uri.UnescapeDataStringdos veces y obtuve lo que quería! : D
— C0NFUS3D

2
En mi humilde opinión, mejor que la respuesta aceptada porque su primera sugerencia también funciona en Portable Class Libaries (PCL)
— Daniel Veihelmann

2
¡la mejor respuesta! pero considere cómo se anidan sus parámetros antes de decodificar completamente. por ejemplo, un valor de parámetro podría ser una URL codificada que a su vez tiene un parámetro con otra URL codificada. Si lo decodifica completamente de una vez, ya no podrá saber qué era qué. sería como sacar a todos los padres de una declaración de álgebra. a = ((b + c) * d) si no lo escapa por completo, el significado de los componentes se puede perder a = b + c * d
— DanO

2
UnescapeDataString no es suficiente ya que no manejará varios casos (por ejemplo, los parámetros en una URL que contienen un espacio usan '+' pero UnescapeDataString intencionalmente no los convierte en espacios). Uri maneja más que solo URL, ya que la pregunta es acerca de la URL que deberíamos usar HttpUtility.UrlDecode
— Lorenz03Tx


23

Prueba esto:

string decodedUrl = HttpUtility.UrlDecode("my.aspx?val=%2Fxyz2F");

21

Tratar:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.