Comment décoder un paramètre d'URL en utilisant C #?


146

Comment puis-je décoder un paramètre d'URL encodé en utilisant C #?

Par exemple, prenez cette URL:

my.aspx?val=%2Fxyz2F

Réponses:


107
Server.UrlDecode(xxxxxxxx)

1
quel espace de noms?
polina-c

1
@PolinaC System.Web.HttpServerUtilityBase, mais cela devrait déjà être importé dans ASP.NET MVC.
Filnor

288
string decodedUrl = Uri.UnescapeDataString(url)

ou

string decodedUrl = HttpUtility.UrlDecode(url)

L'URL n'est pas entièrement décodée en un seul appel. Pour décoder complètement, vous pouvez appeler l'une de ces méthodes en boucle:

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

13
Uri.UnescapeDataString (url)
thanx

@ogi Merci pour ça! Je ne savais pas que cela ne fonctionnait pas complètement avec un seul appel! J'ai couru Uri.UnescapeDataStringdeux fois et j'ai obtenu ce que je voulais !! : D
C0NFUS3D

2
IMHO mieux que la réponse acceptée parce que votre première suggestion fonctionne également dans les bibliothèques de classes portables (PCL)
Daniel Veihelmann

2
meilleure réponse! mais considérez comment vos paramètres sont imbriqués avant de décoder complètement. Par exemple, une valeur de paramètre pourrait être une URL encodée qui a elle-même un paramètre avec une autre URL encodée. Si vous la décodez complètement en une seule fois, vous ne pourrez plus dire ce qui était quoi. ce serait comme retirer toutes les parenthèses d'une déclaration d'algèbre. a = ((b + c) * d) si vous l'avez complètement échappé, la signification des composants peut être perdue a = b + c * d
DanO

2
UnescapeDataString n'est pas suffisant car il ne gérera pas plusieurs cas (par exemple, les paramètres dans une URL contenant un espace utilisent '+' mais UnescapeDataString ne les convertit pas intentionnellement en espaces). Uri gère plus qu'une simple URL, car la question concerne l'URL, nous devrions utiliser HttpUtility.UrlDecode
Lorenz03Tx


23

Essaye ça:

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

21

Essayer:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.