У меня есть набор URL-адресов, аналогичных приведенным ниже в списке
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=en
Мне удалось получить строки запроса, используя следующий код:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Но он возвращает только такие параметры, как идентификатор , сервер , местоположение и т. Д. На основе предоставленного URL-адреса.
Что мне нужно, это добавить / добавить значения в существующие строки запроса.
Например с URL:
http://somesite.com/backup/index.php?action=login&attempts=1
Мне нужно изменить значения параметров строки запроса:
действие = login1
Попытки = 11
Как видите, я добавил «1» для каждого значения. Мне нужно получить набор URL-адресов из строки с различными строками запроса и добавить значение к каждому параметру в конце и снова добавить их в список.
источник
HttpUtility.UrlEncode()
при назначении значения параметра?HttpUtility.ParseQueryString
метод возвращает специальную реализацию NameValueCollection, которая уже обрабатывает это за сценой, когда вы устанавливаете значение.Я обернул ответ Дарина в приятный многократно используемый метод расширения.
Надеюсь, это поможет!
источник
В предоставленных ответах есть проблемы с относительными URL-адресами, такими как «/ some / path /». Это ограничение класса Uri и UriBuilder, которое довольно сложно понять, поскольку я не вижу причин, по которым относительные URL-адреса могут быть проблематичными когда дело доходит до манипулирования запросами.
Вот обходной путь, который работает как для абсолютных, так и для относительных путей, написанных и протестированных в .NET 4:
(небольшое примечание: это также должно работать в .NET 4.5, вам нужно только перейти
propInfo.GetValue(values, null)
наpropInfo.GetValue(values)
)А вот набор юнит-тестов для проверки поведения:
источник
uri.AbsoluteUri
вместо того, чтобыuri.ToString()
из-за неприятных побег эффектов.uri.AbsoluteUri
бросает, если ури не абсолютное!Обратите внимание, что вы можете добавить
Microsoft.AspNetCore.WebUtilities
пакет nuget от Microsoft, а затем использовать его для добавления значений в строку запроса:источник
AddQueryString
том, что он всегда будет добавлять, если ключ уже есть, он не будет обновляться, но будет создавать дубликаты ключей, а это плохоСледующее решение работает для ASP.NET 5 (vNext) и использует класс QueryHelpers для создания URI с параметрами.
URI результата будет иметь
http://iberia.com?param1=value1¶m2=value2¶m3=value3
источник
Конец всем бедам редактирования строки запроса URL
После многих трудов и возни с классом Uri и другими решениями, вот мои методы расширения строк, чтобы решить мои проблемы.
источник
string
s для представления таких URL, учитывая, чтоUri
класс уже существует для этой цели. Или используйте это, или создайте новую абстракцию, если функции отсутствуют.Мне нравится ответ Бьорна, однако его решение вводит в заблуждение, поскольку метод обновляет существующий параметр, а не добавляет его, если он не существует. Чтобы сделать его немного более безопасным, я адаптировал его ниже.
источник
query[paramName] = paramValue;
во всех случаях. Если оно существует, оно будет отвергнуто. Если он не существует, ключ будет создан.Мой подход очень прост для начинающих:
источник