URLの末尾に「?id=001」のように付加される値を
GETパラメータ(クエリ文字列)と言います。
ASP.NETでは、このGETパラメータをRequest.QueryStringで取得できます。
サンプル
例)GETパラメータを取得する
「test.aspx?id=001」というURLでアクセスされた場合、idの値を取得するには次のように記述します。
|
1 2 |
Dim id As String = Request.QueryString("id") 'id には "001" が入る |
例)パラメータが存在するかどうかを確認してから取得する
指定したキーがクエリ文字列に存在しない場合、Request.QueryStringはNothingを返します。
値を使う前に、存在するかどうかを確認しておくと安全です。
|
1 2 3 4 5 6 |
If Request.QueryString("id") IsNot Nothing Then Dim id As String = Request.QueryString("id") '取得できた場合の処理 Else '存在しない場合の処理 End If |
例)すべてのGETパラメータをキーと値の一覧で取得する
「test.aspx?id=001&name=tanaka」のように複数のパラメータが付いている場合、
AllKeysプロパティでキー一覧をループしてすべての値を取得できます。
|
1 2 3 4 |
For Each key As String In Request.QueryString.AllKeys Dim value As String = Request.QueryString(key) 'keyとvalueを使った処理 Next |
例)同じキーが複数指定された値をすべて取得する
「test.aspx?id=001&id=002&id=003」のように同じキーが複数指定されている場合、
Request.QueryString("id")では "001,002,003" のようにカンマ区切りの文字列で返ってきます。
それぞれの値を個別の要素として取得したい場合は、GetValuesメソッドを使用します。
|
1 2 |
Dim values As String() = Request.QueryString.GetValues("id") 'values(0) = "001"、values(1) = "002"、values(2) = "003" |
備考
- Request.QueryStringはNameValueCollection型のため、キーの大文字・小文字は区別されません。
- 取得できる値は自動的にURLデコードされた状態になっています。日本語などのマルチバイト文字も、URLエンコードされていれば元の文字列として取得できます。
- POSTされた値を取得したい場合はRequest.Formを使用します。GET・POSTのどちらで送られたかを問わず取得したい場合はRequest.Paramsが使えますが、QueryString・Form・Cookies・ServerVariablesの内容がすべてまとめて含まれる点に注意してください。
- GETパラメータはURLにそのまま表示され、ブラウザの履歴やアクセスログにも残ります。パスワードなど、他人に見られたくない値を含めるのは避けてください。
- 取得した値をそのまま画面に表示すると、クロスサイトスクリプティング(XSS)の原因になります。画面に出力する際はServer.HtmlEncodeなどでエスケープしてから表示してください。
- ASP.NET Core(Razor PagesやMVC)の場合は、Request.Query["id"]で同様にGETパラメータを取得できます。

コメント