Мне предоставляется абсолютный URI, содержащий строку запроса. Я хочу безопасно добавить значение в строку запроса и изменить существующий параметр.
Я бы предпочел не &foo=bar
использовать регулярные выражения, экранирование URI - сложная задача. Скорее я хочу использовать встроенный механизм, который, как я знаю, будет делать это правильно и обрабатывать экранирование.
Я нашел в тонну ответов , что любое использование HttpUtility
. Однако это ASP.NET Core, поэтому сборки System.Web больше нет, а значит, больше нет HttpUtility
.
Как лучше всего сделать это в ASP.NET Core, ориентируясь на базовую среду выполнения?
c#
asp.net
asp.net-core
vcsjones
источник
источник
Microsoft.AspNet.WebUtilties
может бытьMono.HttpUtility
библиотека .HttpUtility
иParseQueryString
метод.Ответы:
Если вы используете ASP.NET Core 1 или 2, это можно сделать с
Microsoft.AspNetCore.WebUtilities.QueryHelpers
помощью Microsoft.AspNetCore.WebUtilities. пакета .Если вы используете ASP.NET Core 3,0 или более
WebUtilities
поздней версии , теперь он является частью пакета SDK ASP.NET и не требует отдельной ссылки на пакет nuget.Чтобы разобрать его в словаре:
Обратите внимание, что в отличие от
ParseQueryString
System.Web, это возвращает словарь типаIDictionary<string, string[]>
в ASP.NET Core 1.x илиIDictionary<string, StringValues>
в ASP.NET Core 2.x или выше, поэтому значение представляет собой набор строк. Вот так словарь обрабатывает несколько параметров строки запроса с одинаковым именем.Если вы хотите добавить параметр в строку запроса, вы можете использовать другой метод для
QueryHelpers
:Используя .net core 2.2, вы можете получить строку запроса, используя
Вы получите набор пар ключ: значение - вот так
источник
Microsoft.AspNetCore.WebUtilities
взамен.Самый простой и интуитивно понятный способ получить абсолютный URI и управлять его строкой запроса, используя только пакеты ASP.NET Core, можно выполнить в несколько простых шагов:
Установить пакеты
PM> Установочный пакет Microsoft.AspNetCore.WebUtilities
PM> Установочный пакет Microsoft.AspNetCore.Http.Extensions
Важные классы
Чтобы указать на них, вот два важных класса, которые мы будем использовать: QueryHelpers , StringValues , QueryBuilder. .
Код
Чтобы быть в курсе любых изменений, вы можете проверить мое сообщение в блоге об этом здесь: http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
источник
HttpRequest
имеетQuery
свойство, которое предоставляет проанализированную строку запроса черезIReadableStringCollection
интерфейс:Это обсуждение на GitHub также указывает на это.
источник
Эта функция возвращает
Dictionary<string, string>
и не используетсяMicrosoft.xxx
для совместимостиПринимает кодировку параметров с обеих сторон
Принимает повторяющиеся ключи (возвращает последнее значение)
источник
Важно отметить, что с тех пор, как верхний ответ был отмечен как правильный,
Microsoft.AspNetCore.WebUtilities
прошедшее с было выполнено обновление основной версии (с 1.xx до 2.xx).Тем не менее, если вы строите против,
netcoreapp1.1
вам нужно будет запустить следующее, которое устанавливает последнюю поддерживаемую версию1.1.2
:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
источник
Я использую это как метод расширения, работает с любым количеством параметров:
Ссылки Next и Previous, например, в представлении:
источник