Asp.net - Paramètre QueryString vide
-
03-07-2019 - |
Question
Le problème
Quel est le moyen approprié de vérifier le paramètre foo
dans la chaîne de requête de l'URL suivante à l'aide de asp.net? Est-ce même possible?
http://example.com?bar=3&foo
J'ai essayé de vérifier la requête [" foo "]
ainsi que la requête.QueryString [" foo"]
et j'obtiens null
pour les deux. J'ai également essayé de renseigner une List
avec les valeurs de la collection QueryString
mais, comme je le mentionne ci-dessous, il n'inclut pas la valeur.
La question
Je comprends qu'il n'y a pas de valeur, mais Request [" foo "]]
ne devrait pas renvoyer une chaîne vide plutôt que null
? Existe-t-il un moyen de savoir si une clé de chaîne de requête existe même si elle n’a aucune valeur?
Notes
J'ai trouvé ici cette requête. QueryString.AllKeys
inclut null
pour les paramètres de chaîne de requête vides.
[edit]
Comme indiqué ci-dessous par James et Dreas un regex pour analyser l’URL brute pourrait être la meilleure (et éventuellement la seule) approche.
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
La solution
Vous pouvez utiliser null
comme clé pour NameValueCollection
et vous obtiendrez une liste délimitée par des virgules de noms de paramètres qui n'ont pas de valeurs.
Pour http://example.com?bar=3&foo
, vous utiliseriez Request.QueryString [null]
et récupérerait foo
.
Si vous avez plus d'un nom de paramètre sans valeur, cela vous donnera une valeur délimitée par des virgules.
Pour http://example.com?bar=3&foo&test
, vous obtiendrez foo, test
en tant que valeur de retour.
Mise à jour:
Vous pouvez réellement utiliser Request.QueryString.GetValues ??(null)
pour obtenir les noms de paramètre qui n'ont pas de valeur.
Autres conseils
Request.ServerVariables [" QUERY_STRING "]]
renverra la chaîne de requête, complète, sous forme de chaîne. Ensuite, recherchez-le avec un Regex ou IndexOf
Vous obtenez une valeur nulle car le paramètre foo
n'a pas de valeur.
... Quel est le problème exactement?
Si vous voulez toujours vérifier son existence (bien qu'il lui manque une valeur), essayez quelque chose comme ceci:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
Dreas a raison. Variable & bar; bar " a une valeur mais pas foo.
QueryString [& Bar; "] renverra 3 car il a la valeur 3 associée à la variable Bar. Cependant, Foo renverra null car il n’ya pas de valeur et lorsque vous appelez QueryString sur une variable ou une clé, vous interrogez la valeur et non la clé. C’est pourquoi vous renvoyez null.
est probablement un déchet. Si vous utilisez Request.Params ["] ou si vous le parcourez, vous trouverez celui de votre choix. C'est vraiment pratique que d'autres choses.
Faites-moi savoir si vous avez besoin d'aide à cet égard.