SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Scott Guthrie氏 Blog翻訳

ASP.NET MVC 3 (リリース候補版 2)のお知らせ

連載:ScottGu's Blog翻訳


[SkipRequestValidation]から[AllowHtml]

 ASP.NET MVCには、HTMLおよびクロスサイトスクリプト挿入攻撃を防御するビルトインサポートがあるため、HTMLコンテンツを入力しようとするとエラーが投げられます。開発者は、これを有効にするために明示的に許可されていること(そしてアプリケーションがセキュリティ上それをサポートしていること祈りつつ)を示す必要がありました。

 ASP.NET MVC 3では、HTML入力が有効であることを示すモデル/ビューモデルのプロパティに適用できる新しい属性もサポートするようになりました。それにより、さらに粗い防御がDRYな方法で可能になります。先月のRCリリースで、この属性は[SkipRequestValidation]と命名されました。RC2で、もっと直感的にするために[AllowHtml]に名前変更しました。

caption

 モデル/ビューモデル上に上記の[AllowHtml]属性を設定すると、ASP.NET MVC 3は、モデルのバインディング時に、そのプロパティでのHTML挿入の防御をオフにします。

  • Html.Rawヘルパーメソッド

     ASP.NET MVC 3で導入された新しいRazorビューエンジンは、デフォルトで出力が自動的にHTMLエンコードになります。これは、HTMLおよびスクリプト挿入攻撃へ1段階上の防御を提供します。

     RC2では、Html.Rawを追加したので、出力をHTMLエンコードせずに、『そのまま』のコンテンツを描画したいことを明示的に示す時に使用できます。

    caption

ViewModel/ViewからViewBag

 ASP.NET MVC(V1以降)は、コントローラやビュー内でViewData[]辞書をサポートしています。これにより、開発者は、遅延バインディングの形で、コントローラからビューへ情報を引き渡せます。

 この方法は、強く型付けされたモデルクラスの代わり、もしくは強く型付けされたモデルクラスと組み合わせて使用できます。以下のコードはよくある使用ケースを示しており、ViewData[]辞書を通じて遅延バインディング された2つの変数に加え、強く型付けされたProductモデルがビューに引き渡されます。

caption

 ASP.NET MVC 3では、新しいAPIを導入し、.NET 4内で動的な型サポートを利用して、値を設定/取得できます。それにより、標準の『ドット』表示を使用して、引き渡される変数をいくらでも指定でき、それを行うために強く型付けされたクラスを作成する必要はありません。

 以前のASP.NET MVC 3のプレビューで、コントローラのベースクラス上で『ViewModel』と呼ばれる動的プロパティと、ビューテンプレート内の『View』と呼ばれる動的プロパティを使用して、このAPIを公開しました。多くの人から、これらの2つの異なる名前がややこしいと指摘され、また何人かの人からは、よくASP.NET MVCで強く型付けされたViewModelクラスを作成し、このAPIは使用しないため、このコンテキストでViewModelという名前を使用することもややこしいと言われました。

 RC2では、コントローラおよびビューの両方で、ViewBagという同じ名前の動的プロパティを公開しました。これは動的コレクションで、追加のデータを、コントローラからビューテンプレートに引き渡して、リスポンスの生成をサポートします。以下は、タイムスタンプのメッセージと、すべてのカテゴリの一覧をビューテンプレートに引き渡すために使用する方法を示しています。

caption

 以下は、リスポンスを生成するために、ViewBagに引き渡された2つの追加情報を、ビューテンプレート(これは、そのモデルとしてのProductクラスを期待しているため、強く型付けされています)が使用している例です。具体的には、動的ViewBagコレクションに引き渡されたカテゴリ一覧を使用して、ユーザーフレンドリなカテゴリ名のドロップダウンリストを生成し、ProductオブジェクトのCategoryIDプロパティの設定を簡単にしているところを確認してください。

caption

 上記のコントローラ/ビューの組合せは、その後HTMLを以下のように生成します。

caption

次のページ
インストレーション・ノート

この記事は参考になりましたか?

Scott Guthrie氏 Blog翻訳連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト Chica(チカ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Guthrie(Scott Guthrie)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5664 2011/01/24 17:11

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー