ASP.NET Webフォーム Responseオブジェクト

ASP.NET Webフォーム Responseオブジェクト

概要

Pageクラスメンバーの1つ。
サーバーからクライアント(ブラウザ)へ返すデータを設定する。
レスポンス情報は、
(1)HTTPステータス
 サーバー側での処理結果
(2)レスポンスヘッダー
 サーバーやコンテンツに関わる情報
(3)レスポンス本体
 コンテンツ本体(htmlテキスト)
から成り、それぞれを設定するプロパティが用意されている。

HTTPステータス

protected void Page_Load(object sender, EventArgs e)
{
  Page.Response.StatusCode = (int)HttpStatusCode.OK;
}
ステータスコード列挙体
HTTPプロトコル/HTTPステータスコード」参照
成功(200)
HttpStatusCode.OK
リソースが変更されていない(304)
HttpStatusCode.NotModified
HTTP認証を要求(401)
HttpStatusCode.Unauthorized
アクセスを拒否(403)
HttpStatusCode.Forbidden
リソースが見つからない(404)
HttpStatusCode.NotFound
HTTPメソッドが不許可(405)
HttpStatusCode.MethodNotAllowed
サーバーエラー(500)
HttpStatusCode.InternalServerError
応答に必要な機能が未実装(501)
HttpStatusCode.NotImplemented

レスポンスヘッダー

コンテンツタイプ

ブラウザに表示させるファイル種類をMIME(MIMU=Web版拡張子)で指定する。
デフォルトはtext/html
Page.Response.ContentType = "image/jpeg";
Page.Response.BinaryWrite("~.jpg");
※htmlではないのでそれぞれのファイル種類に応じた表示用メソッドが必要
HTTPプロトコル/コンテンツタイプ」参照

Responseオブジェクトメソッド

Redirect

指定ページへ遷移させる。
Page.Response.Redirect(url: "Next.aspx");
Page.Server.Transfer(path: "Next.aspx");
では動作サーバー内のページのみページ遷移可能。しかも速度速い。
しかしコーディングミスやリソース変更時の挙動でダメージが大きいので非推奨

BinaryWrite

バイナリーファイル(htmlではない)ファイルを表示。
Page.Response.ContentType = "MIME");
Page.Response.BinaryWrite("ファイル名.拡張子");

Write

レガシーASPでの使用頻度は高かったが現在では非推奨。
リテラル等のWebフォームを利用すべき。
Page.Response.Write(s:"aaa");

クッキー操作

ローカルに保存されるテキスト情報
ブラウザを終了してもPCを再起動しても次のページに遷移しても削除されるまでは残る。
HTTPプロトコル/クッキー」参照

Response.AppendCookie

※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 = "https://office-yone.com/";
    //クッキーをクライアントに送信
    Response.AppendCookie(cookie: myCookie);
  }
}