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?

Peeyush
quelle
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
}
Glassplitter
quelle
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.

Oded
quelle
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.

MarianoC
quelle
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;
Shapiro Yaacov
quelle
8
string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"]) //true -> there is no value

Wird zurückgegeben, wenn ein Wert vorhanden ist

Peter
quelle
3

Was ist mit einem direkteren Ansatz?

if (Request.QueryString.AllKeys.Contains("mykey")
ProfK
quelle
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.

Imran Rizvi
quelle
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.

user5690126
quelle
1
Request.QueryString.GetValues ​​(null) .Contains ("query")
user5690126