Як перевірити, чи має 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.