「ASP.NET MVC/フィルター」の版間の差分

imported>Administrator
ページの作成:「ASP.NET MVCの'''フィルター'''とは、コントローラークラスやアクションメソッド(コントローラークラスのメソッド)に、[[...」
 
imported>Fallout New Tokyo
 
(2人の利用者による、間の4版が非表示)
1行目: 1行目:
[[ASP.NET MVC]]の'''フィルター'''とは、コントローラークラスやアクションメソッド(コントローラークラスのメソッド)に、[[属性]](Attribute)もちいて処理を挿入する機能のことである。
[[ASP.NET MVC]]の'''フィルター'''とは、コントローラークラスやアクションメソッド(コントローラークラスのメソッド)に、[[属性]](Attribute)もちいて処理を挿入する機能のことである。


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


== 使い道の例 ==
たとえばEditアクションはログインしているユーザーのみ使えるとする場合は、以下のようにEditアクションにAuthorizeフィルター(アトリビュート)を付ける。
たとえばEditアクションはログインしているユーザーのみとする場合は以下のようになる。
<source lang="csharp">
<source lang="csharp">
[Authorize]
[Authorize]
17行目: 17行目:


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


=== 承認フィルター ===
=== 承認フィルター ===
74行目: 74行目:
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute
public class AuthorizeAttribute
   : FilterAttribute,  
   : FilterAttribute,     // FilterAttributeを継承して
     IAuthorizationFilter
     IAuthorizationFilter // IAuthorizationFilterを実装する
{
{
     //...
     //...
}
</source>
なお、一般的なアクションフィルターであればActionFilterAttributeクラスという便利クラスもあるので、そちらを継承して使った方が手っ取り早い。
<source lang="csharp">
public class LoggingFilterAttribute : ActionFilterAttribute
{
    // アクションフィルター前処理
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write(
            "(Logging Filter)Action Executing: "
            + filterContext.ActionDescriptor.ActionName);
        base.OnActionExecuting(filterContext);
    }
    // アクションフィルター後処理
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Exception != null)
        {
            filterContext.HttpContext.Trace.Write("(Logging Filter)Exception thrown");
        }
        base.OnActionExecuted(filterContext);
    }
}
}
</source>
</source>
83行目: 110行目:
== 関連項目 ==
== 関連項目 ==
* [[ASP.NET MVC]]
* [[ASP.NET MVC]]
** [[ASP.NET MVC/セレクター]]


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


{{stub}}
{{stub}}