Codifica e decodifica URL in ASP.NET Core


113
HttpContext.Current.Server.UrlEncode

Funziona solo in .NET Framework. Come posso codificare o decodificare gli argomenti uri nel progetto ASP.NET Core?


2
Non è presente HttpContext in ASP.NET Core o in alcun progetto non Web. Lo stesso metodo è disponibile attraverso i metodi della classe Uri, ad esempio Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos SBAGLIATO - Non c'è HttpContext.Currentma HttpContextè una parte di .Net Core - Microsoft.AspNetCore.Http.HttpContext. Ricorda questo
J. Doe

Ricordati di leggere l'intero commento. L'HttpContext menzionato è MOLTO diverso dall'HttpContext delle versioni precedenti. È molto più comune utilizzare i metodi Uri
Panagiotis Kanavos

Risposte:


186
  • Per ASP.NET Core 2.0+ basta aggiungere lo System.Netspazio dei nomi: la WebUtilityclasse viene fornita come parte del System.Runtime.Extensionspacchetto nuget, a cui si fa riferimento per impostazione predefinita nel progetto ASP.NET Core.

  • Per la versione precedente aggiungi il Microsoft.AspNetCore.WebUtilitiespacchetto nuget.

Quindi la WebUtilityclasse sarà disponibile per te:

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

6
Non ha funzionato per me contro SDK 2.0.0+, tuttavia la risposta di Manuel Alves (System.Net.WebUility) lo ha fatto.
matt.chatterley


43

Per ASP.Net Core 2.0+ e se hai bisogno di spazi da codificare come %20

al contrario di +;

Uso:

 Uri.EscapeDataString(someString);

2

Non sprecare il tuo tempo, ho molta esperienza con questi cosiddetti codificatori URL, sono tutti inutili e hanno stranezze diverse. Ad esempio WebUtility.UrlEncode non si prende cura del segno "+".

Se desideri codificare i parametri URL, utilizza una codifica BASE58. Utilizza solo lettere dell'alfabeto + numeri, quindi non è necessario codificare l'URL.


Puoi spiegare tutte queste stranezze, ho familiarità + solo con quelle che QueryHelpers.AddQueryString o Uri.EscapeDataString non funzionano.
Michael

Ho appena provato WebUtility.UrlEncodee ha meravigliosamente convertito un segno più ("+") in un "% 2B". Sto usando .NET Core 3.1.
Dejan

0

Sto usando un reindirizzamento e UrlEncode non ha funzionato per me perché codifica l'intero URL. Ho risolto questo problema utilizzando invece UriHelper.Encode, mostrato di seguito.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.