Jak zdekodować parametr adresu URL przy użyciu C #?

146

Jak mogę zdekodować zakodowany parametr adresu URL przy użyciu C #?

Na przykład weź ten adres URL:

my.aspx?val=%2Fxyz2F
Tomek
źródło

Odpowiedzi:

107
Server.UrlDecode(xxxxxxxx)
TheVillageIdiot
źródło
1
która przestrzeń nazw?
polina-c
1
@PolinaC System.Web.HttpServerUtilityBase, ale to powinno być już zaimportowane w ASP.NET MVC.
Filnor
288
string decodedUrl = Uri.UnescapeDataString(url)

lub

string decodedUrl = HttpUtility.UrlDecode(url)

Adres URL nie jest w pełni odkodowany przy jednym wywołaniu. Aby w pełni zdekodować, możesz wywołać jedną z tych metod w pętli:

private static string DecodeUrlString(string url) {
    string newUrl;
    while ((newUrl = Uri.UnescapeDataString(url)) != url)
        url = newUrl;
    return newUrl;
}
ogi
źródło
13
Uri.UnescapeDataString (url) thanx
themhz
@ogi Dzięki za to! Nie wiedziałem, że to nie działa w pełni po jednym połączeniu! Pobiegłem Uri.UnescapeDataStringdwa razy i dostałem to, czego chciałem! : D
C0NFUS3D
2
IMHO lepsze niż otrzymana odpowiedź, ponieważ twoja pierwsza sugestia działa również w przenośnych bibliotekach klas (PCL)
Daniel Veihelmann
2
najlepsza odpowiedź! ale zastanów się, w jaki sposób parametry są zagnieżdżone, zanim w pełni zdekodujesz. np. wartość parametru może być zakodowanym adresem URL, który sam ma parametr z innym zakodowanym adresem URL. Jeśli w pełni zdekodujesz go za jednym razem, nie będziesz w stanie powiedzieć, co było czym. byłoby to jak wyciągnięcie wszystkich par z algebry. a = ((b + c) * d) jeśli całkowicie odłączysz się od tego, znaczenie komponentów może zostać utracone a = b + c * d
DanO
2
UnescapeDataString nie jest wystarczające, ponieważ nie obsługuje kilku przypadków (na przykład parametry w adresie URL zawierające spację używają znaku „+”, ale UnescapeDataString celowo nie konwertuje ich na spacje). Uri obsługuje więcej niż tylko URL, ponieważ pytanie dotyczy adresu URL, powinniśmy użyć HttpUtility.UrlDecode
Lorenz03Tx
23

Spróbuj tego:

string decodedUrl = HttpUtility.UrlDecode("my.aspx?val=%2Fxyz2F");
Canavar
źródło
21

Próbować:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Matheus Miranda
źródło