Asp.net - пустой параметр QueryString
Проблема
Каков правильный способ проверить параметр foo
в следующем запросе url с помощью asp.net? Возможно ли это?
http://example.com?bar=3&foo
Я попытался проверить Request["foo"]
, а также Request.QueryString["foo"]
, и я получаю null
для обоих. Я также попытался заполнить List
значениями из коллекции QueryString
, но, как я упоминал ниже, он не включает значение.
Вопрос
Я понимаю, что нет значения, но не должен Request["foo"]
возвращать пустую строку, а не null
? Есть ли способ узнать, существует ли ключ querystring, даже если он не имеет значения?
Примечания
Я нашел здесь, что Request.QueryString.AllKeys
включает null
для параметров пустой строки.
[править]
Как указано ниже James и Dreas Regex для синтаксического анализа исходного URL-адреса быть лучшим (и возможно единственным) подходом.
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
Ответы
Ответ 1
Вы можете использовать null
как ключ для NameValueCollection
, и он предоставит вам список имен параметров, разделенных запятыми, которые не имеют значений.
Для http://example.com?bar=3&foo
вы должны использовать Request.QueryString[null]
, и он будет извлекать foo
.
Если у вас есть несколько имен параметров без значения, это даст вам значение, разделенное запятой.
Для http://example.com?bar=3&foo&test
вы получите foo,test
как значение назад.
Update:
Фактически вы можете использовать Request.QueryString.GetValues(null)
для получения имен параметров, которые не имеют значений.
Ответ 2
Request.ServerVariables["QUERY_STRING"]
вернет строку запроса, заполнив ее как строку. Затем выполните поиск с помощью Regex или IndexOf
Ответ 3
Вы получаете значение null, потому что параметр foo
не имеет значения с ним.
... В чем проблема?
Если вы все еще хотите проверить его существование (хотя оно не имеет значения), попробуйте что-то вроде этого:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
Ответ 4
Повреждения верны. Переменная "bar" имеет значение, но foo не делает.
Ответ 5
QueryString [ "Bar" ] вернет 3, потому что имеет значение 3, связанное с переменной Bar. Тем не менее, Foo возвращает null, потому что их значение не является, и когда вы вызываете QueryString для переменной или ключа, вы запрашиваете значение, а не ключ, поэтому вы возвращаете null.
Ответ 6
Строка запроса вероятно, является пустой. Если вы используете Request.Params [""] или повторите его, то вы найдете нужную. Это действительно удобно, чем другие вещи.
Сообщите мне, нужна ли вам помощь.