Codificación y decodificación de URL en ASP.NET Core


113
HttpContext.Current.Server.UrlEncode

Solo funciona en .NET Framework. ¿Cómo puedo codificar o decodificar argumentos uri en el proyecto ASP.NET Core?


2
No hay HttpContext en ASP.NET Core, ni en ningún proyecto que no sea web. El mismo método se encuentra disponible a través de los métodos de la clase Uri, por ejemplo Uri.EscapeDataString , Uri.EscapeUriString
— Panagiotis Kanavos

1
@PanagiotisKanavos INCORRECTO - No hay HttpContext.Currentpero HttpContextes parte de .Net Core - Microsoft.AspNetCore.Http.HttpContext. Recuerda esto
— J. Doe

Recuerda leer el comentario completo. El HttpContext que mencionas es MUY diferente del HttpContext de versiones anteriores. Es mucho más común usar los métodos Uri
— Panagiotis Kanavos

Posible duplicado del reemplazo
— Win

Respuestas:


186
  • Para ASP.NET Core 2.0+ simplemente agregue el System.Netespacio de nombres: la WebUtilityclase se envía como parte del System.Runtime.Extensionspaquete nuget, al que se hace referencia de manera predeterminada en el proyecto ASP.NET Core.

  • Para la versión anterior, agregue el Microsoft.AspNetCore.WebUtilitiespaquete nuget.

Entonces la WebUtilityclase estará disponible para ti:

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

6
No funcionó para mí contra SDK 2.0.0+, sin embargo, la respuesta de Manuel Alves (System.Net.WebUility) sí lo hizo.
— matt.chatterley


43

Para ASP.Net Core 2.0+ y si necesita que los espacios se codifiquen como %20

en contraposición a +;

Utilizar:

 Uri.EscapeDataString(someString);

2

No pierda su tiempo, tengo mucha experiencia con estos llamados codificadores de URL, todos son inútiles y tienen diferentes peculiaridades. Por ejemplo, WebUtility.UrlEncode no se ocupa del signo "+".

Si desea codificar parámetros de URL, utilice una codificación BASE58. Utiliza solo letras del alfabeto + números, por lo que no es necesario codificar la URL.


¿Puedes explicar todas estas peculiaridades? Solo estoy familiarizado con + que QueryHelpers.AddQueryString o Uri.EscapeDataString no hacen.
— Michael

Lo acabo de probar WebUtility.UrlEncodey convirtió maravillosamente un signo más ("+") en un "% 2B". Estoy usando .NET Core 3.1.
— Dejan

0

Estoy usando una redirección y UrlEncode no me funcionó porque codifica toda la URL. Resolví esto usando en su lugar UriHelper.Encode, que se muestra a continuación.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.