144 votes

Codage et décodage des URL en ASP.NET Core

HttpContext.Current.Server.UrlEncode

Cela ne fonctionne que dans .NET Framework. Comment puis-je coder ou décoder les arguments URI dans ASP.NET Core ?

2 votes

Il n'y a pas de HttpContext dans ASP.NET Core - ou tout autre projet non Web. La même méthode est disponible à travers les méthodes de la classe Uri, par exemple Uri.EscapeDataString , Uri.EscapeUriString

1 votes

@PanagiotisKanavos FAUX - Il n'y a pas de HttpContext.Current mais HttpContext fait partie de .Net Core - Microsoft.AspNetCore.Http.HttpContext . Rappelez-vous ceci

0 votes

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. C'est beaucoup plus fréquents pour utiliser les méthodes Uri

233voto

Set Points 21500
  • Pour ASP.NET Core 2.0+, ajoutez simplement System.Net espace de noms - WebUtility est livrée avec la classe System.Runtime.Extensions nuget, qui est référencé par défaut dans le projet ASP.NET Core.

  • Pour la version précédente, ajoutez Microsoft.AspNetCore.WebUtilities paquet nuget.

Ensuite, le WebUtility sera disponible pour vous :

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}

7 votes

Cela n'a pas fonctionné pour moi avec le SDK 2.0.0+, mais la réponse de Manuel Alves (System.Net.WebUility) a fonctionné.

0 votes

L'utilisation est la suivante : var decodedUrl = WebUtility.UrlDecode(encodedUrl) ;

93voto

Manuel Alves Points 192

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

16 votes

Pour Net Core 2+, lorsque j'utilise System.Net.WebUtility.UrlEncode : les espaces sont codés avec un + . J'ai utilisé Uri.EscapeDataString pour coder avec %20 .

63voto

ttugates Points 1431

Pour ASP.Net Core 2.0+ et si vous avez besoin que les espaces soient codés en tant que %20

à l'opposé de + ;

Utilisez :

 Uri.EscapeDataString(someString);

3voto

Jordan Points 340

J'utilise un rediriger et UrlEncode n'a pas fonctionné pour moi car il encode l'url entière. J'ai résolu ce problème en utilisant plutôt UriHelper.Encode, comme indiqué ci-dessous.

UriHelper.Encode

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

0voto

Erti-Chris Eelmaa Points 5165

Ne perds pas ton temps, petit. J'ai beaucoup d'expérience avec ces soi-disant encodeurs url, ils sont tous inutiles, et ont des bizarreries différentes. Par exemple, WebUtility.UrlEncode ne prend pas en compte le signe "+".

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

0 votes

Pouvez-vous expliquer toutes ces bizarreries, je ne connais que + que QueryHelpers.AddQueryString ou Uri.EscapeDataString ne fait pas.

2 votes

Je viens d'essayer WebUtility.UrlEncode et il a merveilleusement converti un signe plus ("+") en "%2B". J'utilise .NET Core 3.1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X