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 アプリケーションは開発出来ますね。