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?


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);
}

6
Nie działało dla mnie przeciwko SDK 2.0.0+, jednak odpowiedź Manuela Alvesa (System.Net.WebUility) tak.
matt.chatterley


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);

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.


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)));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.