Кодування URL-адреси та декодування в ядрі ASP.NET


113
HttpContext.Current.Server.UrlEncode

Це лише робота в .NET Framework. Як я можу кодувати або декодувати аргументи урі в проекті ASP.NET Core?


2
Немає HttpContext в ASP.NET Core - або будь-який не веб-проект. Цей же метод доступний у методах класу Урі, наприклад, Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos WRONG - Існує, HttpContext.Currentале HttpContextє частиною .Net Core - Microsoft.AspNetCore.Http.HttpContext. Пам'ятайте про це
Дж. До

Не забудьте прочитати весь коментар. HttpContext, який ви згадуєте, ДУЖЕ відрізняється від HttpContext попередніх версій. Це набагато частіше використовувати методи Uri
Панайотіс Kanavos

Можливий дублікат WebUtility.HtmlDecode заміна в .NET Core
Win

Відповіді:


186
  • Для 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.WebUtility) зробив.
matt.chatterley

81

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


2
Це слід позначити як правильну відповідь. Дякую.
Tod Birdsall

11
Коли я використовую Net Core 2+, System.Net.WebUtility.UrlEncodeпробіли кодуються символом a +. Раніше я Uri.EscapeDataStringкодував %20.
ttugates

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.