Как правильно проверить параметр 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([&=]|$)")
@Dreas, я предполагаю, что есть подразумеваемое "= true" в работе (в то время как полное отсутствие параметра foo подразумевает "foo = false")
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf ("foo = ")> = 0? истина: ложь; // вернет истину, даже если у него нет значения





Вы получаете null, потому что параметр foo не имеет значения.
... В чем именно проблема?
Если вы все еще хотите проверить его существование (хотя у него нет значения), попробуйте что-то вроде этого:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo = ") >= 0 ? true : false;
Я хотел бы проверить значение ключа строки запроса, даже если оно не имеет значения. Я обновил вопрос соответственно.
Дреас прав. Переменная bar имеет значение, а foo - нет.
Правильно, для foo нет значения. Однако я не могу найти никакой ссылки на foo, кроме необработанного URL-адреса. Тем не менее, пустой параметр является параметром.
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) для получения имен параметров, не имеющих значений.
Идеально! Это именно то, что я искал. Отличный ответ.
Думаю, лучше поздно, чем никогда ... :-)
строка запроса, вероятно, бесполезна. Если вы используете Request.Params [""] или повторяете его, то вы найдете желаемый. Это действительно удобно, чем другие вещи.
Дайте мне знать, если вам понадобится в этом помощь.
Какой смысл проверять, существует ли строка запроса, но она пуста? Его ценность (на самом деле отсутствие ценности) столь же бесполезна.