Codificação e decodificação de URL no ASP.NET Core


113
HttpContext.Current.Server.UrlEncode

Só funciona no .NET Framework. Como posso codificar ou decodificar argumentos uri no projeto ASP.NET Core?


2
Não há HttpContext no ASP.NET Core - ou em qualquer projeto que não seja da Web. O mesmo método é acessível através dos métodos da classe Uri, por exemplo Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos ERRADO - Não existe, HttpContext.Currentmas HttpContextfaz parte do .Net Core - Microsoft.AspNetCore.Http.HttpContext. Lembre-se disso
J. Doe

Lembre-se de ler o comentário completo. O HttpContext que você mencionou é MUITO diferente do HttpContext das versões anteriores. É muito mais comum usar os métodos Uri
Panagiotis Kanavos

Possível duplicata da substituição
Win

Respostas:


186
  • Para ASP.NET Core 2.0+, basta adicionar o System.Netnamespace - a WebUtilityclasse é fornecida como parte do System.Runtime.Extensionspacote nuget, que é referenciado por padrão no projeto ASP.NET Core.

  • Para a versão anterior, adicione o Microsoft.AspNetCore.WebUtilitiespacote nuget.

Então a WebUtilityaula estará disponível para você:

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

6
Não funcionou para mim no SDK 2.0.0+, mas a resposta de Manuel Alves (System.Net.WebUility) funcionou.
matt.chatterley


43

Para ASP.Net Core 2.0+ e se você precisar de espaços para serem codificados como %20

em oposição a +;

Usar:

 Uri.EscapeDataString(someString);

2

Não perca seu tempo, tenho muita experiência com esses chamados codificadores de URL, todos são inúteis e têm peculiaridades diferentes. Por exemplo, WebUtility.UrlEncode não aceita o sinal "+".

Se você deseja codificar parâmetros de URL, use uma codificação BASE58. Ele usa apenas letras do alfabeto + números, portanto, você não precisa codificar url.


Você pode explicar todas essas peculiaridades? Só estou familiarizado com o que QueryHelpers.AddQueryString ou Uri.EscapeDataString não fazem.
Michael

Acabei de experimentar WebUtility.UrlEncodee converteu maravilhosamente um sinal de mais ("+") em "% 2B". Estou usando o .NET Core 3.1.
Dejan

0

Estou usando um redirecionamento e UrlEncode não funcionou para mim porque ele codifica todo o url. Resolvi isso usando UriHelper.Encode, mostrado abaixo.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.