Wie dekodiere ich einen URL-Parameter mit C #?


146

Wie kann ich einen codierten URL-Parameter mit C # dekodieren?

Nehmen Sie zum Beispiel diese URL:

my.aspx?val=%2Fxyz2F

Antworten:


107
Server.UrlDecode(xxxxxxxx)

1
Welcher Namespace?
Polina-C

1
@PolinaC System.Web.HttpServerUtilityBase, aber das sollte schon in ASP.NET MVC importiert werden.
Filnor

288
string decodedUrl = Uri.UnescapeDataString(url)

oder

string decodedUrl = HttpUtility.UrlDecode(url)

Die URL wird mit einem Aufruf nicht vollständig dekodiert. Um vollständig zu dekodieren, können Sie eine dieser Methoden in einer Schleife aufrufen:

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

13
Uri.UnescapeDataString (url) Danke
themhz

@ogi Danke dafür! Ich wusste nicht, dass es mit nur einem Anruf nicht vollständig funktioniert! Ich bin Uri.UnescapeDataStringzweimal gelaufen und habe bekommen, was ich wollte !! : D
C0NFUS3D

2
IMHO besser als die Antwort, weil Ihr erster Vorschlag auch in Portable Class Libaries (PCLs) funktioniert
Daniel Veihelmann

2
beste Antwort! Überlegen Sie jedoch, wie Ihre Parameter verschachtelt sind, bevor Sie sie vollständig dekodieren. Ein Parameterwert kann beispielsweise eine codierte URL sein, die selbst einen Parameter mit einer anderen codierten URL enthält. Wenn Sie ihn auf einmal vollständig dekodieren, können Sie nicht mehr erkennen, was was war. Es wäre, als würde man alle Eltern aus einer Algebra-Aussage herausreißen. a = ((b + c) * d) Wenn Sie es vollständig entfernen, kann die Bedeutung von Komponenten verloren gehen. a = b + c * d
DanO

2
UnescapeDataString ist nicht ausreichend, da es nicht mehrere Fälle behandelt (zum Beispiel Parameter in einer URL, die ein Leerzeichen enthalten, verwenden '+', aber UnescapeDataString konvertiert diese absichtlich nicht in Leerzeichen). Uri behandelt mehr als nur URL, da die Frage nach der URL lautet, sollten wir HttpUtility.UrlDecode
Lorenz03Tx


23

Versuche dies:

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

21

Versuchen:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.