Encodage et décodage d'URL dans ASP.NET Core

114
HttpContext.Current.Server.UrlEncode

Cela ne fonctionne que dans .NET Framework. Comment puis-je encoder ou décoder des arguments d'URI dans un projet ASP.NET Core?

wtf512
la source
2
Il n'y a aucun HttpContext dans ASP.NET Core - ni aucun projet non Web. La même méthode est disponible via les méthodes de la classe Uri, par exemple Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos
1
@PanagiotisKanavos FAUX - Il n'y a pas HttpContext.Currentmais HttpContextfait partie de .Net Core - Microsoft.AspNetCore.Http.HttpContext. Rappelez-vous ceci
J. Doe
N'oubliez pas de lire l'intégralité du commentaire. Le HttpContext que vous mentionnez est TRÈS différent du HttpContext des versions précédentes. Il est beaucoup plus courant d'utiliser les méthodes Uri
Panagiotis Kanavos
Copie
Gagnez le

Réponses:

187
  • Pour ASP.NET Core 2.0+, ajoutez simplement un System.Netespace de noms - la WebUtilityclasse est System.Runtime.Extensionsfournie dans le cadre du package nuget, référencé par défaut dans le projet ASP.NET Core.

  • Pour la version précédente, ajoutez le Microsoft.AspNetCore.WebUtilitiespackage nuget.

Ensuite, le WebUtilitycours sera disponible pour vous:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}
Ensemble
la source
6
Cela n'a pas fonctionné pour moi contre SDK 2.0.0+, mais la réponse de Manuel Alves (System.Net.WebUility) l'a fait.
matt.chatterley
81

Il est disponible sur la version 2.0.0 du SDK .Net Core , dans System.Net.WebUtility.UrlEncode( voir documentation )

Manuel Alves
la source
2
Cela devrait être marqué comme la bonne réponse. Merci.
Tod Birdsall
11
Pour Net Core 2+, lorsque j'utilise System.Net.WebUtility.UrlEncode: les espaces sont encodés avec un +. J'avais l'habitude Uri.EscapeDataStringd'encoder avec %20.
ttugates le
43

Pour ASP.Net Core 2.0+ et si vous avez besoin d'espaces à encoder comme %20

par opposition à +;

Utilisation:

 Uri.EscapeDataString(someString);
ttugates
la source
2

Ne perdez pas votre temps, j'ai beaucoup d'expérience avec ces soi-disant encodeurs d'URL, ils sont tous inutiles et ont des bizarreries différentes. Par exemple, WebUtility.UrlEncode ne prend pas en charge le signe "+".

Si vous souhaitez encoder des paramètres d'URL, utilisez un encodage BASE58. Il n'utilise que des lettres de l'alphabet + des chiffres, vous n'avez donc pas besoin d'encoder l'URL.

Erti-Chris Eelmaa
la source
Pouvez-vous expliquer toutes ces bizarreries, je ne connais que + ce que QueryHelpers.AddQueryString ou Uri.EscapeDataString ne font pas.
Michael
Je viens d'essayer WebUtility.UrlEncodeet il a merveilleusement converti un signe plus ("+") en un "% 2B". J'utilise .NET Core 3.1.
Dejan le
0

J'utilise un redirection et UrlEncode n'a pas fonctionné pour moi car il code l'URL entière. J'ai résolu ce problème en utilisant à la place UriHelper.Encode, illustré ci-dessous.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Jordan
la source