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?

wtf512
fuente
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);
}
Conjunto
fuente
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
80

Está disponible en la versión 2.0.0 de .Net Core SDK , en System.Net.WebUtility.UrlEncode( ver documentación )

Manuel Alves
fuente
2
Esto debe marcarse como la respuesta correcta. Gracias.
Tod Birdsall
11
Para Net Core 2+, cuando uso System.Net.WebUtility.UrlEncode: los espacios están codificados con un +. Solía Uri.EscapeDataStringcodificar con %20.
ttugates
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);
ttugates
fuente
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.

Erti-Chris Eelmaa
fuente
¿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)));
Jordán
fuente