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
À M
la source

Réponses:

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

Essayer:

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