Параметры строки запроса Query без значений в ASP.NET
Я пытаюсь настроить страницу с двумя типами поведения. Я разделяю их по URL-адресу. Доступ к одному типу осуществляется через /some-controller/some-action
, а другой - через /some-controller/some-action?customize
.
Не похоже, что объект Request.QueryString содержит что-либо, хотя при посещении второго URL... Я имею в виду, что в коллекции ключей есть один элемент, но он null
, а не 'customize'
, У кого-нибудь есть идеи об этом или как это сделать. Я бы хотел, чтобы избежать ручного анализа строки запроса любой ценой:).
Ответы
Ответ 1
ASP.NET не поддерживает определение наличия параметров строки запроса без значений, так как Request.QueryString["customize"]
и Request.QueryString["foo"]
являются null
. Вам придется либо разобрать его самостоятельно, либо указать значение, например. ?customize=1
Ответ 2
Параметры без ключа
Ответ Джона Шермана только технически правильный. Параметры запроса без значений не поддерживаются, но поддерживаются значения запроса без ключей.
Другими словами, "/some-controller/some-action?customize"
считается URL-адресом с одним параметром запроса, значение которого "customize"
и которое не имеет ключа (т.е. ключ null
).
Получение
Чтобы получить все такие параметры запроса, вы используете Request.QueryString.GetValues(null)
, чтобы получить их как массив строк, или вы можете использовать Request.QueryString[null]
, чтобы получить их как одну строку с разделителями-запятыми.
Пустые параметры
Пустой параметр (как это происходит в "?foo=bar&&spam=eggs"
) будет отображаться как значение string.Empty
с ключом null
, как и конечный "&"
.
Например, довольно непростая строка запроса "?&"
будет отображаться в виде двух значений string.Empty
, имеющих ключ null
.
Строка с пустыми запросами
Существует один краевой случай, который не соответствует шаблону. Это empy, но представленная строка запроса (например, "/some-controller/some-action?" ). На основе ранее показанного шаблона оно будет иметь одно значение, а именно string.Empty
с ключом null
. Однако на самом деле он не будет иметь никаких ценностей.
Ответ 3
Информация о других параметрах запроса
Не будучи непосредственно частью этого вопроса, эта дополнительная информация также может оказаться полезной.
Символ Сеператора
ASP.NET не поддерживает параметры запроса, разделенные ';'
, которые W3C рекомендует, которые серверы поддерживают в качестве альтернативы '&'
.
Параметры Начиная с "="
Параметры запроса, начинающиеся с '='
, считаются имеющими ключ, который будет string.Empty
. Не путайте это с помощью клавиши null
. Например, "/some-controller/some-action?=baz"
имеет одно значение, ключ которого string.Empty
и значение которого baz
.
Больше, чем один "=" Символ
Если имеется более одного символа '='
, ключ - все до первого '='
, а значение после него равно.
Например, "/some-controller/some-action?foo=bar=baz"
имеет один параметр с ключом "foo"
и значением bar=baz
.
Пример аннуляции "/some-controller/some-action?eggs==spam"
имеет один параметр с ключом "eggs"
и значением "=spam"
.
Несколько параметров одного и того же имени
В моем другом ответе также поддерживаются несколько параметров с одним и тем же именем.
Например, если URL-адрес "/some-controller/some-action?foo=bar&foo=baz"
, то результатом Request.QueryString["foo"]
является `` bar, baz ".
Если вы хотите, чтобы каждая строка была отдельно, используйте Response.QueryString.GetValues("foo")
, который возвращает массив строк.
Пример
Следующий очень неразумный URL-адрес будет считаться шестью параметрами:
"/some-controller/some-action?=baz&foo=bar&edit&spam=eggs=ham&==&"
Это:
+--------------+--------------+
| Key | Value |
+--------------+--------------+
| string.Empty | "baz" |
| "foo" | "bar" |
| null | "edit" |
| "spam" | "eggs=ham" |
| string.Empty | "=" |
| null | string.Empty |
+--------------+--------------+
Ответ 4
Вы можете проверить значение Request.Url.Query
, если ?customise
- единственное, что вы ищете.