Я хотел бы разобрать строку, например, p1=6&p2=7&p3=8
в NameValueCollection
.
Какой самый элегантный способ сделать это, когда у вас нет доступа к Page.Request
объекту?
.net
parsing
query-string
Натан Смит
источник
источник
HttpUtility.ParseQueryString
будет моей рекомендацией, за исключением того, что в случаеHttpUtility.ParseQueryString("&X=1&X=2&X=3")
результата наличие....X=1,2,3...
нескольких параметров с одним и тем же именем является редкостью, но необходимо для поддержки параметров контроллера, таких как int [], IEnumerable <int> и т. д. (такие параметры могут использоваться для поддержки нескольких флажков) см. «Несколько вхождений одной и той же переменной строки запроса объединены в одну запись», как на сайте MS . Версия метода,HttpUtility.ParseQueryString будет работать до тех пор, пока вы находитесь в веб-приложении или не против включения зависимости от System.Web. Еще один способ сделать это:
источник
?foo=1&bar
.HttpUtility
будет анализировать это как{ key = null, value = "bar" }
Многие ответы содержат пользовательские примеры из-за зависимости принятого ответа от System.Web . Из пакета NuGet Microsoft.AspNet.WebApi.Client есть метод UriExtensions.ParseQueryString , который также можно использовать:
Поэтому, если вы хотите избежать зависимости System.Web и не хотите создавать свою собственную, это хороший вариант.
источник
Я хотел удалить зависимость от System.Web, чтобы можно было проанализировать строку запроса развертывания ClickOnce, при этом предварительные условия ограничены «Подмножеством клиентских рамок».
Мне понравился ответ Р.П. Я добавил дополнительную логику.
источник
Мне нужна была функция, которая немного более универсальна, чем та, которая была предоставлена уже при работе с OLSC-запросами.
Вот мое решение:
Это может быть неплохой идеей
<Extension()>
, чтобы добавить эту возможность к самому Ури.источник
Чтобы сделать это без
System.Web
, без написания самостоятельно и без дополнительных пакетов NuGet:System.Net.Http.Formatting
using System.Net.Http;
Используйте этот код:
https://msdn.microsoft.com/en-us/library/system.net.http.uriextensions(v=vs.118).aspx
источник
Если вы хотите избежать зависимости от System.Web, которая требуется для использования HttpUtility.ParseQueryString , вы можете использовать
Uri
метод расширения, указанныйParseQueryString
вSystem.Net.Http
.Обязательно добавьте ссылку (если вы еще этого не сделали)
System.Net.Http
в свой проект.Обратите внимание, что вы должны преобразовать тело ответа в допустимое,
Uri
чтобыParseQueryString
(inSystem.Net.Http
) работал.источник
источник
Я только что понял, что клиент Web API имеет
ParseQueryString
метод расширения, который работает наUri
и возвращаетHttpValueCollection
:источник
Просто зайдите в Request.QueryString. AllKeys, упомянутый в качестве другого ответа, просто дает вам массив ключей.
источник
HttpUtility.ParseQueryString(Request.Url.Query)
ВозвратHttpValueCollection
(внутренний класс). Это наследуется отNameValueCollection
.источник
Если вам не нужна зависимость System.Web, просто вставьте этот исходный код из класса HttpUtility.
Я только что взбил это вместе из исходного кода Mono . Он содержит HttpUtility и все его зависимости (например, IHtmlString, Helpers, HttpEncoder, HttpQSCollection).
Тогда используйте
HttpUtility.ParseQueryString
.https://gist.github.com/bjorn-ali-goransson/b04a7c44808bb2de8cca3fc9a3762f9c
источник
Так как каждый, кажется, вставляет свое решение .. вот мое :-) Мне нужно это из библиотеки классов без
System.Web
извлечения параметров идентификатора из сохраненных гиперссылок.Мысль, которой я поделюсь, потому что я нахожу это решение быстрее и лучше.
Использование:
источник
Выберите Request.QueryString.Keys для NameValueCollection всех параметров строки запроса.
источник
Чтобы получить все значения Querystring, попробуйте это:
источник
источник
источник
Я перевожу на C # версию Джош-Брауна в VB
источник
Это мой код, я думаю, что он очень полезен:
источник