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.