しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

System.Web.WebPages にある拡張メソッドまとめ

WebPages 周りではいろいろとクラスが追加されていて面白いですね。今回は System.Web.WebPages 名前空間に定義されている拡張メソッドを紹介したいと思います。

System.Web.WebPages 名前空間はデフォルトで using されているので、そのまま使えるようになっています。

HttpContextExtensions クラス

HttpContextBase に対する拡張メソッドが用意されています。

RedirectLocal メソッド

同一ホスト上の URL へリダイレクトします。それ以外の URL を指定した場合にはルートページへリダイレクトします。

@{
    // About.cshtml へリダイレクトする
    Context.RedirectLocal("About.cshtml");
}

RegisterForDispose メソッド

HTTP リクエストが完了後に Dispose を行うリストへ登録します。

@{
    // ストリームを作成
    var stream = File.Open(...);

    // 何らかの処理

    // HTTP リクエスト終了時に Dispose される
    Context.RegisterForLocal(stream);
}

RequestExtensions クラス

HttpRequestBase クラスに対する拡張メソッドが用意されています。

IsUrlLocalToHost メソッド

同一ホスト上の URL か確認します。

@if (Request.IsUrlLocalToHost(url))
{
    // 同一ホスト上であった場合の処理
}

ResponseExtensions クラス

HttpResponseBase クラスに対する拡張メソッドが用意されています。

OutputCache メソッド

出力キャッシュを有効にします。引数でキャッシュする時間や条件などを指定できます。

@{
    // 出力を 10 秒間キャッシュする
    Response.OutputCache(10);
}

id パラメータで出力キャッシュを変更したい場合には varyByParams パラメータに指定します。この辺りは OutputCache 属性と何ら変わりませんね。

@{
    // id の値をキーにして出力をキャッシュ
    Response.OutputCache(10, varyByParams: new[] { "id" });
}

SetStatus メソッド

HTTP ステータスコードを設定します。

@{
    // 404 Not Found を返す
    Response.SetStatus(HttpStatusCode.NotFound);
}

WriteBinary メソッド

出力ストリームにバイナリデータを書き込みます。MIME を指定できるオーバーロードが用意されています。

@{
    // PNG としてデータを出力する
    Response.WriteBinary(imageData, "image/png");
}

StringExtensions クラス

文字列からの型変換を行うための拡張メソッドが各種用意されています。

As<T> / AsBool / AsDateTime / AsDecimal / AsFloat / AsInt メソッド

文字列から指定された型への変換を行います。それぞれデフォルト値をとるオーバーロードが用意されています。

型コンバータが用意されている型に関して変換が可能になっています。

@{
    // b = bool(true)
    var b = "True".AsBool();

    // d = DateTime(2011/04/25 22:00:00)
    var d = "2011/04/25 22:00:00".AsDateTime();

    // de = decimal(100)
    var de = "100".AsDecimal();

    // f = float(3.14f)
    var f = "3.14".AsFloat();

    // i = int(12345)
    var i = "12345".AsInt();

    // db = double(0.1234567)
    var db = "0.1234567".As<double>();
}

Is<T> / IsBool / IsDateTime / IsDecimal / IsFloat / IsInt メソッド

文字列から指定された型への変換が可能か確認します。As と同様に型コンバータが用意されている型に関して利用可能です。

@* これは変換不可能 *@
@if ("True".IsInt())
{
}

@* これは変換可能 *@
@if ("3.14".Is<double>())
{
}

かなり細かいところに手が届くメソッドが用意されています。cshtml ファイルだけで十分 Web アプリケーションは開発出来ますね。