Request("url")って、何を要求してるんだろう。

aspx2004-12-27

Requestオブジェクトの取り扱いに気をつけよ。というお話。

Dim xFoo As String = Request("Foo")

というアクセスが可能なのだが、この場合

ClientCertificate
HTTP 要求の中で送信されたクライアント証明書に格納されているフィールドの値です。
Cookies
HTTP 要求の中で送信された cookie の値です。
Form
HTTP 要求本体のフォーム要素の値です。
QueryString
HTTP クエリ文字列の中の変数の値です。
ServerVariables
定義済み環境変数の値です。

のどれを返すべきか迷ってしまう。
MSDNライブラリでもこう解説している。

コレクション名を指定せずに Request( variable ) という呼び出しを使用して変数に直接アクセスすることもできます。この場合、Web サーバーは次の順序でコレクションを探します。

  1. QueryString
  2. Form
  3. Cookies
  4. ClientCertificate
  5. ServerVariables

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpiis/iishelp/iis/htm/asp/vbob5ulw.asp

このため、正しく指定しないことによって、QueryString と ServerVariables の
取り違えなどが発生する可能性がある。

パラメータ名「url」に注意!!

GETコマンド(多分POSTでも)で、パラメータ名を「url」にして、何かの情報をASP.NETページへ送信しても、ページ側でうまく設定された値を取得することが出来ない場合がある。

この問題はレガシーASPでも発生する。