Подтвердить что ты не робот

Параметры строки запроса Query без значений в ASP.NET

Я пытаюсь настроить страницу с двумя типами поведения. Я разделяю их по URL-адресу. Доступ к одному типу осуществляется через /some-controller/some-action, а другой - через /some-controller/some-action?customize.

Не похоже, что объект Request.QueryString содержит что-либо, хотя при посещении второго URL... Я имею в виду, что в коллекции ключей есть один элемент, но он null, а не 'customize', У кого-нибудь есть идеи об этом или как это сделать. Я бы хотел, чтобы избежать ручного анализа строки запроса любой ценой:).

4b9b3361

Ответ 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 - единственное, что вы ищете.