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
Tom
fonte

Respostas:

107
Server.UrlDecode(xxxxxxxx)
TheVillageIdiot
fonte
1
qual namespace?
Polina-c
1
@PolinaC System.Web.HttpServerUtilityBase, mas isso já deve ser importado no ASP.NET MVC.
Filnor 16/03/19
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;
}
ogi
fonte
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");
Canavar
fonte
21

Experimentar:

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