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?

wtf512
fonte
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);
}
Conjunto
fonte
6
Não funcionou para mim no SDK 2.0.0+, mas a resposta de Manuel Alves (System.Net.WebUility) funcionou.
matt.chatterley
80

Está disponível na versão 2.0.0 do .Net Core SDK , em System.Net.WebUtility.UrlEncode( veja a documentação )

Manuel alves
fonte
2
Essa deve ser marcada como a resposta correta. Obrigado.
Tod Birdsall
11
Para Net Core 2+, quando eu uso System.Net.WebUtility.UrlEncode: os espaços são codificados com a +. Eu costumava Uri.EscapeDataStringcodificar com %20.
ttugates
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);
tugates
fonte
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.

Erti-Chris Eelmaa
fonte
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)));
Jordânia
fonte