¿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.