Asp.net – пустой параметр QueryString
-
03-07-2019 - |
Вопрос
Проблема
Как правильно проверить 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[""] или перебираете его, то вы найдете нужный.Это действительно удобно, чем другие вещи.
Дайте мне знать, если вам нужна помощь в этом.