Asp.netを使用して次のURLのクエリ文字列のfoo
パラメータを確認する適切な方法は何ですか?これも可能ですか?
http://example.com?bar=3&foo
Request["foo"]
とRequest.QueryString["foo"]
をチェックしてみましたが、両方ともnull
を取得しました。また、List
にQueryString
コレクションの値を入力しようとしましたが、以下で説明するように、値は含まれていません。
値がないことは理解していますが、Request["foo"]
はnull
ではなく空の文字列を返すべきではありませんか?値がなくてもクエリ文字列キーが存在するかどうかを確認する方法はありますか?
hereRequest.QueryString.AllKeys
に空白のクエリ文字列パラメータのnull
が含まれていることがわかりました。
以下に James および Dreas で述べられているように、生のURLを解析するための正規表現が最良の(そしておそらく唯一の)アプローチかもしれません。
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
null
をNameValueCollection
のキーとして使用すると、値を持たないパラメーター名のコンマ区切りのリストが表示されます。
_http://example.com?bar=3&foo
_の場合、_Request.QueryString[null]
_を使用すると、foo
が取得されます。
値のないパラメーター名が複数ある場合は、コンマで区切られた値が表示されます。
_http://example.com?bar=3&foo&test
_の場合、値として_foo,test
_が返されます。
更新:
実際には、Request.QueryString.GetValues(null)
を使用して、値を持たないパラメーター名を取得できます。
Request.ServerVariables["QUERY_STRING"]
は、クエリ文字列completeを文字列として返します。次に、RegexまたはIndexOfを使用して検索します
foo
パラメータに値がないため、nullになります。
...正確には何が問題なのですか?
それでもその存在を確認したい場合は(値が不足していますが)、次のようなことを試してください。
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
QueryString ["Bar"]は、変数Barに関連付けられた値3を持っているため、3を返します。ただし、Fooは値がないため、nullを返します。変数またはキーでQueryStringを呼び出すときは、キーではなく値をクエリしているため、nullを返します。
クエリ文字列はおそらく無駄なものです。 Request.Params [""]を使用するか、それを繰り返すと、目的の1つが見つかります。それは他のものより本当に便利です。
これについてサポートが必要な場合はお知らせください。
Dreasは正しいです。変数「bar」には値がありますが、fooにはありません。