¿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
Tom
fuente

Respuestas:

107
Server.UrlDecode(xxxxxxxx)
TheIdiot de la aldea
fuente
1
cual espacio de nombres?
polina-c
1
@PolinaC System.Web.HttpServerUtilityBase, pero eso ya debería importarse en ASP.NET MVC.
Filnor
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;
}
ogi
fuente
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");
Canavar
fuente
21

Tratar:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Matheus Miranda
fuente