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?


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

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);
}

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


43

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

par opposition à +;

Utilisation:

 Uri.EscapeDataString(someString);

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.


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)));
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.