Вопрос

Проблема

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

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

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

Вопрос

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

Примечания

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

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

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

Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
Это было полезно?

Решение

Вы можете использовать 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) чтобы получить имена параметров, которые не имеют значений.

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

Request.ServerVariables["QUERY_STRING"] вернет строку запроса в полном виде в виде строки.Затем найдите его, используя Regex или IndexOf.

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

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

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

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

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

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

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

Дайте мне знать, если вам нужна помощь в этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top