Пустой параметр QueryString

Проблема

Как правильно проверить параметр foo в строке запроса следующего URL-адреса с помощью asp.net? Это вообще возможно?

http://example.com?bar=3&foo

Я пробовал проверить Request["foo"], а также Request.QueryString["foo"] и получил null для обоих. Я также попытался заполнить List значениями из коллекции QueryString, но, как я упоминаю ниже, он не включает значение.

Вопрос

Я понимаю, что значения нет, но разве Request["foo"] не должен возвращать пустую строку, а не null? Есть ли способ узнать, существует ли ключ строки запроса, даже если он не имеет значения?

Заметки

Я обнаружил здесь, что Request.QueryString.AllKeys включает null для пустых параметров строки запроса.

[редактировать]

Как указано ниже Джеймс и Дреас, Regex для анализа необработанного URL-адреса может быть лучшим (и, возможно, единственным) подходом.

Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")

Какой смысл проверять, существует ли строка запроса, но она пуста? Его ценность (на самом деле отсутствие ценности) столь же бесполезна.

Andreas Grech 30.12.2008 17:29

@Dreas, я предполагаю, что есть подразумеваемое "= true" в работе (в то время как полное отсутствие параметра foo подразумевает "foo = false")

James Curran 30.12.2008 17:32

bool doesFooExist = Request.Url.AbsoluteUri.IndexOf ("foo = ")> = 0? истина: ложь; // вернет истину, даже если у него нет значения

Andreas Grech 30.12.2008 17:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
26
3
27 992
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы получаете null, потому что параметр foo не имеет значения.

... В чем именно проблема?

Если вы все еще хотите проверить его существование (хотя у него нет значения), попробуйте что-то вроде этого:

bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo = ") >= 0 ? true : false;

Я хотел бы проверить значение ключа строки запроса, даже если оно не имеет значения. Я обновил вопрос соответственно.

brad 30.12.2008 17:26

Дреас прав. Переменная bar имеет значение, а foo - нет.

Правильно, для foo нет значения. Однако я не могу найти никакой ссылки на foo, кроме необработанного URL-адреса. Тем не менее, пустой параметр является параметром.

brad 30.12.2008 17:27

Request.ServerVariables["QUERY_STRING"] вернет полную строку запроса в виде строки. Затем выполните поиск с помощью Regex или IndexOf

QueryString ["Bar"] вернет 3, потому что у него есть значение 3, связанное с переменной Bar. Однако Foo вернет null, потому что у них нет значения, и когда вы вызываете QueryString для переменной или ключа, вы запрашиваете значение, а не ключ, поэтому вы возвращаете null.

Ответ принят как подходящий

Вы можете использовать null в качестве ключа для NameValueCollection, и он предоставит вам список имен параметров, разделенных запятыми, которые не имеют значений.

Для http://example.com?bar=3&foo вы должны использовать Request.QueryString[null], и он получит foo.

Если у вас есть более одного имени параметра без значения, он предоставит вам значение, разделенное запятыми.

Для http://example.com?bar=3&foo&test вы получите обратно foo,test.

Обновлять:

Фактически вы можете использовать Request.QueryString.GetValues(null) для получения имен параметров, не имеющих значений.

Идеально! Это именно то, что я искал. Отличный ответ.

brad 30.08.2010 06:56

Думаю, лучше поздно, чем никогда ... :-)

joelvh 07.09.2010 18:28

строка запроса, вероятно, бесполезна. Если вы используете Request.Params [""] или повторяете его, то вы найдете желаемый. Это действительно удобно, чем другие вещи.

Дайте мне знать, если вам понадобится в этом помощь.

Другие вопросы по теме