Кодирование и декодирование URL-адресов в ASP.NET Core

114
HttpContext.Current.Server.UrlEncode

Это работает только в .NET Framework. Как я могу кодировать или декодировать аргументы uri в проекте ASP.NET Core?

wtf512
источник
2
HttpContext отсутствует ни в ASP.NET Core, ни в любом другом проекте, не относящемся к Интернету. Тот же метод доступен через методы класса Uri, например Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos 05
1
@PanagiotisKanavos НЕПРАВИЛЬНО - не существует, HttpContext.Currentно HttpContextявляется частью .Net Core - Microsoft.AspNetCore.Http.HttpContext. Помните это
J. Doe
Не забудьте прочитать весь комментарий. Упомянутый вами HttpContext ОЧЕНЬ отличается от HttpContext предыдущих версий. Это гораздо чаще использовать методы Uri
Панайотис Kanavos
Возможный дубликат замены WebUtility.HtmlDecode в .NET Core
Win

Ответы:

187
  • Для ASP.NET Core 2.0+ просто добавьте System.Netпространство имен - WebUtilityкласс поставляется как часть System.Runtime.Extensionsпакета nuget, на который по умолчанию ссылаются в проекте ASP.NET Core.

  • Для предыдущей версии добавьте Microsoft.AspNetCore.WebUtilitiesпакет nuget.

Тогда вам WebUtilityбудет доступен урок:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}
Устанавливать
источник
6
У меня не сработало против SDK 2.0.0+, однако ответ Мануэля Алвеса (System.Net.WebUility) сработал.
matt.chatterley
81

Он доступен в версии 2.0.0 SDK .Net Core в System.Net.WebUtility.UrlEncode( см. Документацию )

Мануэль Алвес
источник
2
Это должно быть отмечено как правильный ответ. Спасибо.
Tod Birdsall
11
Для Net Core 2+, когда я использую System.Net.WebUtility.UrlEncode: пробелы кодируются с расширением +. Раньше я Uri.EscapeDataStringкодировал с помощью %20.
ttugates 04
43

Для ASP.Net Core 2.0+ и если вам нужно, чтобы пробелы были закодированы как %20

в отличие от +;

Использование:

 Uri.EscapeDataString(someString);
тугует
источник
2

Не тратьте зря время, у меня большой опыт работы с так называемыми кодировщиками URL-адресов, все они бесполезны и имеют разные особенности. Например, WebUtility.UrlEncode не заботится о знаке "+".

Если вы хотите закодировать параметры URL, используйте кодировку BASE58. Он использует только буквы алфавита + цифры, поэтому вам не нужно кодировать URL-адрес.

Эрти-Крис Элмаа
источник
Можете ли вы объяснить все эти причуды, я знаком только с тем, + что QueryHelpers.AddQueryString или Uri.EscapeDataString не подходят.
Майкл
Я только что попробовал, WebUtility.UrlEncodeи он чудесным образом преобразовал знак плюса («+») в «% 2B». Я использую .NET Core 3.1.
Деян
0

Я использую перенаправление , и UrlEncode у меня не работал, потому что он кодирует весь URL. Я решил это, вместо этого используя UriHelper.Encode, показанный ниже.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Иордания
источник