Як перевірити, чи має Request.QueryString певне значення в ASP.NET?


77

У мене є error.aspxсторінка. Якщо користувач переходить на цю сторінку, він отримує шлях помилки в page_load()URL-адресі методу за допомогою, Request.QueryString["aspxerrorpath"]і це працює нормально.

Але якщо користувач безпосередньо звертається до цієї сторінки, він генерує виняток, оскільки aspxerrorpathйого немає.

Як я можу перевірити, чи aspxerrorpathє це чи ні?


я також спробував використати Request.QueryString.Count! = 0, але тоді проблема полягає в тому, що якщо користувач приєднує щось подібне? abc = 1223, то знову це дасть виняток
Peeyush

Request.QueryString.Count != 0просто скаже вам, чи відсутні параметри взагалі.
Одін

Відповіді:


125

Ви можете просто перевірити null:

if(Request.QueryString["aspxerrorpath"]!=null)
{
   //your code that depends on aspxerrorpath here
}

дякую, це працює, я пробував це раніше, але в той час це не спрацьовувало, але зараз воно працює .. можливо, цього часу щось не вистачало. :-)
Peeyush

5
@Peeyush Ви, мабуть, виявите, що намагалися передати його на '.ToString ()' і, отже, намагалися привести нуль до значення рядкового значення перед тестуванням самого нульового значення. Це поширена помилка.
Phill Healey

Зауважте, що це не зможе перевірити, чи присутній ключ у QueryString, коли він не має значення.
Захисник, один

2
У ядрі Mvc це request.Query.ContainsKey ("aspxerrorpath")
Dhanuka777,

36

Перевірте значення параметра:

// .NET < 4.0
if (string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"]))
{
 // not there!
}

// .NET >= 4.0
if (string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"]))
{
 // not there!
}

Якщо воно не існує, значення буде null, якщо воно існує, але не має встановленого значення, це буде порожній рядок.

Я вважаю, що вищезазначене буде відповідати вашим потребам краще, ніж просто тест null, оскільки порожній рядок так само поганий для вашої конкретної ситуації.


2
А що, якщо .NET == 4.0? Використовувати IsNullOrWhiteSpace?
Кріс,

1
якщо .NET == 4.0? Використовуйте IsNullOrWhiteSpace
Mike W

13

Щоб перевірити наявність порожнього QueryString, слід використовувати Request.QueryString.HasKeysвластивість.

Щоб перевірити наявність ключа: Request.QueryString.AllKeys.Contains()

Тоді ви можете отримати значення ist і зробити будь-яку іншу перевірку, яку хочете, наприклад, isNullOrEmpty тощо.


5
Request.QueryString.AllKeys.Contains()фактично поверне false, коли ключ присутній, але не має значення.
Захисник, один


8
string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"]) //true -> there is no value

Повернеться, якщо є значення


3

А як щодо більш прямого підходу?

if (Request.QueryString.AllKeys.Contains("mykey")

2

Щоб вирішити проблему, напишіть наступний рядок у методі Page_Load вашої сторінки.

if (String.IsNullOrEmpty(Request.QueryString["aspxerrorpath"])) return;

.Net 4.0 забезпечує більш пильний огляд нульових, порожніх або пробілів, використовуйте його, як показано в наступному рядку:

if(string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"])) return;

Це не запустить ваші наступні виписки (логіку вашого бізнесу), якщо рядок запиту не має aspxerrorpath.


2

думаю, чек, який ви шукаєте, такий:

if(Request.QueryString["query"] != null) 

Він повертається, nullоскільки в цьому рядку запиту він не має значення для цього ключа.


1
Request.QueryString.GetValues ​​(null) .Contains ("query")
user5690126
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.