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([&=]|$)")
Était-ce utile?

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.

La chaîne de requête

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top