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


114
HttpContext.Current.Server.UrlEncode

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


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)));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.