Wie kann ich überprüfen, ob Request.QueryString in ASP.NET einen bestimmten Wert hat oder nicht?


76

Ich habe eine error.aspxSeite. Wenn ein Benutzer zu dieser Seite kommt, ruft er den Fehlerpfad in der page_load()Methoden-URL mit ab Request.QueryString["aspxerrorpath"]und es funktioniert einwandfrei.

Wenn ein Benutzer jedoch direkt auf diese Seite zugreift, wird eine Ausnahme generiert, da diese aspxerrorpathnicht vorhanden ist.

Wie kann ich überprüfen, ob aspxerrorpathes da ist oder nicht?


Ich habe auch versucht, Request.QueryString.Count! = 0 zu verwenden, aber dann ist das Problem, wenn Benutzer etwas wie? abc = 1223 anhängen, dann wird es wieder Ausnahme geben
Peeyush

Request.QueryString.Count != 0wird Ihnen einfach sagen, ob es überhaupt keine Parameter gibt .
Oded

Antworten:


124

Sie können einfach überprüfen nach null:

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

danke, es funktioniert, ich habe es vorher versucht, aber dieses Mal hat es nicht funktioniert, aber jetzt funktioniert es.
Vielleicht hat

5
@Peeyush Sie werden wahrscheinlich feststellen, dass Sie versucht haben, es in ein '.ToString ()' umzuwandeln, und daher versucht haben, eine Null in einen Zeichenfolgenwert umzuwandeln, bevor Sie den Nullwert selbst getestet haben. Es ist ein häufiger Fehler.
Phill Healey

Beachten Sie, dass dadurch nicht überprüft werden kann, ob ein Schlüssel im QueryString vorhanden ist, wenn er keinen Wert hat.
Beschützer ein

2
Im Mvc-Kern ist es request.Query.ContainsKey ("aspxerrorpath")
Dhanuka777

35

Überprüfen Sie den Wert des Parameters:

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

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

Wenn es nicht existiert, ist der Wert null, wenn es existiert, aber kein Wert festgelegt ist, eine leere Zeichenfolge.

Ich glaube, dass das oben Genannte Ihren Anforderungen besser entspricht als nur ein Test null, da eine leere Zeichenfolge für Ihre spezifische Situation genauso schlecht ist.


2
Und was ist, wenn .NET == 4.0? Verwenden IsNullOrWhiteSpace?
Chris

1
wenn .NET == 4.0? Verwenden Sie IsNullOrWhiteSpace
Mike W

12

Um nach einem leeren QueryString zu suchen, sollten Sie die Request.QueryString.HasKeysEigenschaft verwenden.

So überprüfen Sie, ob der Schlüssel vorhanden ist: Request.QueryString.AllKeys.Contains()

Dann können Sie den Wert von ist abrufen und jede andere gewünschte Prüfung durchführen, z. B. isNullOrEmpty usw.


5
Request.QueryString.AllKeys.Contains()gibt tatsächlich false zurück, wenn der Schlüssel vorhanden ist, aber keinen Wert hat.
Beschützer ein

10

Sie können auch versuchen:

if (!Request.QueryString.AllKeys.Contains("aspxerrorpath"))
   return;

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

Wird zurückgegeben, wenn ein Wert vorhanden ist


3

Was ist mit einem direkteren Ansatz?

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

2

Um Ihr Problem zu beheben, schreiben Sie die folgende Zeile in die Page Load-Methode Ihrer Seite.

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

.Net 4.0 bietet einen genaueren Blick auf Null-, Leer- oder Leerzeichenfolgen. Verwenden Sie es wie in der folgenden Zeile gezeigt:

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

Dadurch werden Ihre nächsten Anweisungen (Ihre Geschäftslogik) nicht ausgeführt, wenn die Abfragezeichenfolge keinen Aspxerrorpath enthält.


2

Ich denke, der Scheck, den Sie suchen, ist folgender:

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

Es wird zurückgegeben, nullweil es in dieser Abfragezeichenfolge keinen Wert für diesen Schlüssel hat.


1
Request.QueryString.GetValues ​​(null) .Contains ("query")
user5690126
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.