Кодування 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.