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.