メモ:Request でつまづく

執筆日時:

Request

QueryString 、Form、Cookies、ServerVariables の各コレクションから指定したオブジェクトを取得します。

HttpRequest クラス (System.Web)

Default.cshtml?Hoge=Fuga というリクエストがあった時、

Request["Hoge"]  => "Fuga"

が得られる。つまり、

Request.QueryString["Hoge"]  => "Fuga"

これと同様。ちなみに、存在しないキーを指定すると

Request["HogeHoge"]  => string.Empty

が返る。null じゃないのか! null だったら、

var text = Request["Hoge"] ?? "初期値";

って書けるのになぁ。まぁ、いろいろ大人の事情があるんだろう。

Request.QueryString と Request.Form

QueryString でも Form でも "Hoge" というキーが含まれているとき、Request["Hoge"] では Request.QueryString["Hoge"] の値が返る。

つまり、優先度は

QueryString > Form

であるらしい。QueryString 、Form、Cookies、ServerVariables がどの順番で優先されるのかは知らないけれど、まぁ、この順番なんだろうなって気はしてる(試してない)。

ついつい Form[] を多用するのだけれど、こういうのが分かってないとたまにハマるみたい orz

Request.QueryString[] におけるキーの重複

では、

Default.cshtml?Hoge=1&Hoge=2&Hoge=3

で Request["Hoge"] すると何が返るんだろう? めんどくさくて試してないけど、たぶんこれは 3 じゃないかと思う。なんとなく。

気が向いた時の宿題にしておこう。