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

Antworten:

107
Server.UrlDecode(xxxxxxxx)
TheVillageIdiot
quelle
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;
}
ogi
quelle
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");
Canavar
quelle
21

Versuchen:

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