Kodowanie i dekodowanie adresów URL w ASP.NET Core

114
HttpContext.Current.Server.UrlEncode

Działa tylko w .NET Framework. Jak mogę kodować lub dekodować argumenty uri w projekcie ASP.NET Core?

wtf512
źródło
2
W ASP.NET Core nie ma HttpContext - ani żadnego projektu innego niż sieci Web. Ta sama metoda jest dostępna za pośrednictwem metod klasy Uri, np. Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos.
1
@PanagiotisKanavos WRONG - Nie ma, HttpContext.Currentale HttpContextjest częścią .Net Core - Microsoft.AspNetCore.Http.HttpContext. Pamiętaj o tym
J. Doe,
Pamiętaj, aby przeczytać cały komentarz. Wspomniany HttpContext BARDZO różni się od HttpContext z poprzednich wersji. O wiele częściej używa się metod Uri
Panagiotis Kanavos,

Odpowiedzi:

187
  • W przypadku ASP.NET Core 2.0+ wystarczy dodać System.Netprzestrzeń nazw - WebUtilityklasa jest dostarczana jako część System.Runtime.Extensionspakietu NuGet, do którego odwołuje się domyślnie w projekcie ASP.NET Core.

  • W przypadku poprzedniej wersji dodaj Microsoft.AspNetCore.WebUtilitiespakiet NuGet.

Wtedy WebUtilityklasa będzie dla Ciebie dostępna:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}
Zestaw
źródło
6
Nie działało dla mnie przeciwko SDK 2.0.0+, jednak odpowiedź Manuela Alvesa (System.Net.WebUility) tak.
matt.chatterley
81

Jest dostępny w wersji 2.0.0 zestawu .Net Core SDK w System.Net.WebUtility.UrlEncode( zobacz dokumentację )

Manuel Alves
źródło
2
Powinno to być oznaczone jako poprawna odpowiedź. Dzięki.
Tod Birdsall
11
W przypadku Net Core 2+, kiedy używam System.Net.WebUtility.UrlEncode: spacje są kodowane przy użyciu rozszerzenia +. Kiedyś Uri.EscapeDataStringkodowałem z %20.
ttugates
43

W przypadku ASP.Net Core 2.0+ i jeśli potrzebujesz spacji do zakodowania jako %20

w przeciwieństwie do +;

Posługiwać się:

 Uri.EscapeDataString(someString);
ttugates
źródło
2

Nie trać czasu, mam duże doświadczenie z tak zwanymi koderami adresów URL, wszystkie są bezużyteczne i mają różne dziwactwa. Np. WebUtility.UrlEncode nie dba o znak „+”.

Jeśli chcesz zakodować parametry adresu URL, zastosuj kodowanie BASE58. Używa tylko liter alfabetu + cyfr, więc nie musisz kodować adresu URL.

Erti-Chris Eelmaa
źródło
Czy możesz wyjaśnić wszystkie te dziwactwa, jestem zaznajomiony tylko z tym, czego + QueryHelpers.AddQueryString lub Uri.EscapeDataString nie robi.
Michael
Właśnie wypróbowałem WebUtility.UrlEncodei cudownie przekonwertował znak plus („+”) na „% 2B”. Używam .NET Core 3.1.
Dejan
0

Używam przekierowania , a UrlEncode nie działa dla mnie, ponieważ koduje cały adres URL. Rozwiązałem ten problem, używając zamiast tego UriHelper.Encode, pokazanego poniżej.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Jordania
źródło