Como decodificar um parâmetro de URL usando C #?


146

Como decodificar um parâmetro de URL codificado usando C #?

Por exemplo, pegue este URL:

my.aspx?val=%2Fxyz2F

Respostas:



288
string decodedUrl = Uri.UnescapeDataString(url)

ou

string decodedUrl = HttpUtility.UrlDecode(url)

O URL não é totalmente decodificado com uma chamada. Para decodificar completamente, você pode chamar um destes métodos em um loop:

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

13
Uri.UnescapeDataString (url) thanx
themhz

@ogi Obrigado por isso! Eu não sabia que não funcionava totalmente com apenas uma ligação! Corri Uri.UnescapeDataStringduas vezes e consegui o que queria !! : D
C0NFUS3D 31/12/13

2
IMHO melhor do que a resposta accpeted porque a sua primeira sugestão também trabalha em portáteis Classe libaries (PCLs)
Daniel Veihelmann

2
melhor resposta! mas considere como seus parâmetros são aninhados antes de decodificar completamente. por exemplo, um valor de parâmetro pode ser um URL codificado que possui um parâmetro com outro URL codificado. Se você o decodificar completamente de uma só vez, não poderá mais dizer o que era o que era. seria como tirar todos os parênteses de uma declaração de álgebra. a = ((b + c) * d) se você unescape-lo totalmente, o significado de componentes podem ser perdidos a = b + c * d
Dano

2
O UnescapeDataString não é suficiente, pois não trata de vários casos (por exemplo, parâmetros em uma URL que contém um espaço usando '+', mas o UnescapeDataString intencionalmente não os converte em espaços). Alças Uri mais do que apenas URL, como a questão está pedindo cerca de URL que deve usar HttpUtility.UrlDecode
Lorenz03Tx


23

Tente o seguinte:

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

21

Experimentar:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.