メインメニューを開く

差分

ASP.NET MVC/フィルター

3,544 バイト追加, 2012年3月22日 (木) 05:00
ページの作成:「ASP.NET MVCの'''フィルター'''とは、コントローラークラスやアクションメソッド(コントローラークラスのメソッド)に、[[...」
[[ASP.NET MVC]]の'''フィルター'''とは、コントローラークラスやアクションメソッド(コントローラークラスのメソッド)に、[[属性]](Attribute)もちいて処理を挿入する機能のことである。

たとえばユーザー認証処理がされている、されていない、などの処理を[[アクション]]ごとに書いていたのでは面倒、かつ本流ではないソースコードが入りまくり見通しが悪くなるのでフィルター化しておくと便利だという。

== 使い道の例 ==
たとえばEditアクションはログインしているユーザーのみとする場合は以下のようになる。
<source lang="csharp">
[Authorize]
public ActionResult Edit(int id)
{
//...
return View();
}
</source>

ASP.NET MVCでは上記のAuthorize属性をはじめ、OutputCache属性やChildActionOnly属性、HandleError属性など、さまざまなフィルターがあらかじめ用意されている。またフィルターは自作することも可能である。

== フィルターの種類 ==
[[ASP.NET MVC]]のフィルターは大きく、承認フィルター、アクションフィルター、結果フィルター、例外フィルターの4つに分けられる。

=== 承認フィルター ===
IAuthorizationFilterインターフェイスを実装し、認証に関わる処理を記述する。

=== アクションフィルター ===
IActionFilterインターフェイスを実装し、アクションメソッドの実行前後で行われるべき処理を記述する。

=== 結果フィルター ===
IResultFilterインターフェイスを実装し、[[ActionResult]]の実行前後(ビューエンジンの実行前後)に行われるべき処理を記述する。

=== 例外フィルター ===
IExceptionFilterインターフェイスを実装し、例外発生時に行われるべき処理を記述する。

== フィルターの実行順序 ==
<pre>
承認フィルター
 ↓
アクションフィルター前処理
 ↓
アクションメソッド
 ↓
アクションフィルター後処理
 ↓
結果フィルター前処理
 ↓
ビューエンジン
 ↓
結果フィルター後処理

その他:例外フィルター
</pre>

== 標準フィルター ==
[[ASP.NET MVC]]にはあらかじめいくつかフィルターが用意されている。なお、MSDNのドキュメントでは「実装例」と繰り返し書かれてる。

* AuthorizeAttribute - 承認フィルター
* OutputCacheAttribute - 結果フィルター
* HandleErrorAttribute - 例外フィルター

<!--
=== ASP.NET MVC 2で追加された標準フィルター ===
* RequireHttpsAttribute
* ValidateInputAttribute
* ValidateAntiForgeryTokenAttribute

=== ASP.NET MVC 3で追加された標準フィルター ===
* AllowHtmlAttribute
-->

== 独自フィルター ==
自前の独自フィルターを作成するには、基本的にFilterAttributeクラスを継承し、前述のフィルターの種類に応じたインターフェイスを実装する。

たとえば標準フィルターのAuthorizeAttributeであれば以下のようになっている。
<source lang="csharp">
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute
: FilterAttribute,
IAuthorizationFilter
{
//...
}
</source>

== 関連項目 ==
* [[ASP.NET MVC]]

== 参考文献 ==
<references/>
== 外部リンク ==

{{stub}}
匿名利用者