ASP.NET Webフォーム Requestオブジェクト
概要
Pageクラスメンバーの1つ。
クライアント(ブラウザ)からサーバーへアクセスする際のリクエスト情報を取得する。
リクエスト情報は
・HTTPメソッド
・リクエストヘッダー
・リクエスト本体(クエリ情報)
から成り、Requestオブジェクトにはそれぞれの情報を取得する為の各種プロパティが用意されている。
ポストデータの取得
Request.Formプロパティ
※~.aspx
<body>
<form id="myForm" runat="server" method="post">
<asp:TextBox ID="myText" runat="server"></asp:TextBox>
<asp:Button ID="myButton" runat="server" Text="Button" OnClick="myButton_Click" />
</form>
</body>
※~.aspx.cs
public partial class index : System.Web.UI.Page
{
protected void myButton_Click(object sender, EventArgs e)
{
string textValue = Page.Request.Form[name:"myText"];
string textValue = this.myText.Text; と同義(こちらの方が良い)
}
}
クエリ情報の取得
Request.QueryStringプロパティ
※~.aspx
<body>
<form id="myForm" runat="server" method="post">
<asp:HyperLink
ID="myLink"
runat="server"
NavigateUrl="~/index.aspx?prm1=10&prm2=test">
リンク
</asp:HyperLink>
</form>
</body>
※~.aspx.cs
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string prm1 = Page.Request.QueryString[name: "prm1"];
⇒ prm1 : 10
string prm2 = Page.Request.QueryString[name: "prm2"];
⇒ prm2 : test
}
}
リクエストヘッダー情報の取得
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
言語設定取得
string language = Page.Request.UserLanguages[0].ToString();
⇒ language : ja等(ブラウザ設定に依る)
(言語設定の利用方法は「ASP.NET 多言語対応」参照)
HTTPメソッド取得
string method = Page.Request.HttpMethod.ToString();
⇒ method : get等
リンク元ページURL取得(遷移時)
string url = Page.Request.UrlReferrer.ToString();
}
}
リクエストURLの取得
仮想/物理パスやクエリ情報の有無によってプロパティが異なる。
アプリケーションパス
「ファイル名を指定して実行」にファイル名だけを入力して実行できる様なアプリケーション専用のパス
追加パス
パス形式パラメーター(例ではplus)
仮想パス
インタネット上に公開しているURL
物理パス
Webサーバー上のファイルパス
※index.aspx
<body>
<form id="form1" runat="server">
<asp:HyperLink
ID="HyperLink1"
runat="server"
NavigateUrl="~/next.aspx/plus?prm1=100&prm2=test"
Text="リンク"
Target="_blank"></asp:HyperLink>
</form>
</body>
※next.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("ApplicationPath : " + Page.Request.ApplicationPath);
Response.Write("PhysicalApplicationPath : " + Page.Request.PhysicalApplicationPath);
Response.Write("CurrentExecutionFilePath : " + Page.Request.CurrentExecutionFilePath);
Response.Write("FilePath : " + Page.Request.FilePath);
Response.Write("Path : " + Page.Request.Path);
Response.Write("PhysicalPath : " + Page.Request.PhysicalPath);
Response.Write("RawUrl : " + Page.Request.RawUrl);
Response.Write("Url : " + Page.Request.Url.ToString());
Response.Write("PathInfo : " + Page.Request.PathInfo);
}
※結果(next.aspx)
ApplicationPath : /
PhysicalApplicationPath : C:\Test\
CurrentExecutionFilePath : /next.aspx
FilePath : /next.aspx
Path : /next.aspx/plus
PhysicalPath : C:\Test\next.aspx
RawUrl : /next.aspx/plus?prm1=100&prm2=test
Url : http:localhost:63707/next.aspx/plus?prm1=100&prm2=test
PathInfo : /plus
プロパティ | 種類 | 物理/仮想 | クエリ情報 | 追加パス |
---|---|---|---|---|
ApplicationPath | アプリケーションパス | 仮想 | × | × |
PhysicalApplicationPath | アプリケーションパス | 物理 | × | × |
CurrentExecutionFilePath | ファイルパス | 仮想 | × | × |
FilePath | ファイルパス | 仮想 | × | × |
Path | ファイルパス | 仮想 | × | ○ |
PhysicalPath | ファイルパス | 物理 | × | × |
RawUrl | ファイルパス | 仮想 | ○ | ○ |
Url | ファイルパス | 仮想(フルURL) | ○ | ○ |
PathInfo | 追加パス | 仮想 | × | ○ |
クッキーの取得
ローカルに保存されるテキスト情報
ブラウザを終了してもPCを再起動しても次のページに遷移しても削除されるまでは残る。
※index.aspx
<body>
<form id="myForm" runat="server">
<asp:TextBox ID="myText" runat="server"></asp:TextBox><br />
<asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" />
</form>
</body>
※index.aspx.cs
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.Cookies["email"] != null)
{
クッキーの内容をテキストボックスに表示
this.myText.Text = Request.Cookies["email"].Value;
}
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
クッキー作成
(テキストボックスの内容をクッキーに保存)
HttpCookie myCookie = new HttpCookie(name: "email", value: this.myText.Text);
クッキー有効期限を7日間に設定
myCookie.Expires = DateTime.Now.AddDays(value: 7);
SSL通信のみを許可する
myCookie.Secure = true;
HTTPプロトコル経由でのみアクセスできる
(古いブラウザでは非対応)
myCookie.HttpOnly = true;
クッキーが有効になるドメイン/フォルダを設定
myCookie.Domain = "http:office-yone.com/";
クッキーをクライアントに送信
Response.AppendCookie(cookie: myCookie);
}
}