MVC入門学習ノート(六)
五フィルタFilter
この章では、Filterに関する重典の説明を引用します.ログインの有無またはユーザ権限 を判断する.決定出力キャッシュ 盗難防止チェーン クモ ローカライズと国際化設定 動的Action を実現する.
FilterはAspで宣言的なプログラミング方式である.NetMVCではAction(またはコントローラ)に限定されます.FilterがActionFilterAttribute抽象クラスに継承するには、void OnActionExecuting(ActionExecutingContext)とvoid OnActionExecuted(ActionExecutedContext)を上書きできます.
およびvoid OnResultExecuting(ResultExecutingContext)およびvoid OnResultExecuted(ResultExecutedContext)
OnActionExecutionはAction実行前の操作、OnActionExecutedはAction実行後の操作です
一方、OnResultExecutionはActionResultを解析する前に実行し、OnResultExecutedはActionResultを解析した後に実行する.
次に例を示します.まず、TestFilterという名前のFilterを作成します.
次にアクションを作成します.
ビューに次のように書き込みます.
最後に他のページでSession[temp]の出力結果を得た.
これにより、これらの実行順序も上記のようになる
FilterをControllerに適用するには2つの方法があります
1.次のように、Filterを直接Controllerに適用します.
2.Controller内のOnActionExecution/onActionExecuted/onResultExecution/onResultExecutedの4つのメソッドを書き換える.
いくつかのシステムのFilterについてお話しします
ページのアクセス形式を指定します.
ページはPost形式でのみアクセスできます.すなわち、フォームのコミットです.
アクションの名前を指定します.
適用シーン:メソッド名をAction名、またはAction名をキーワードにしたくない場合は、
現在のメソッドは通常のメソッドのみアクションとして解析されません
Actionのキャッシュの追加
このアクションはHtmlなどの危険コードを受け入れることができる(ASP.NET MVCはaspxで<%@Pageの属性を設定して同等のタスクを完了できない.)
サーバの改ざんを検証します.
この章では、Filterに関する重典の説明を引用します.
FilterはAspで宣言的なプログラミング方式である.NetMVCではAction(またはコントローラ)に限定されます.FilterがActionFilterAttribute抽象クラスに継承するには、void OnActionExecuting(ActionExecutingContext)とvoid OnActionExecuted(ActionExecutedContext)を上書きできます.
およびvoid OnResultExecuting(ResultExecutingContext)およびvoid OnResultExecuted(ResultExecutedContext)
OnActionExecutionはAction実行前の操作、OnActionExecutedはAction実行後の操作です
一方、OnResultExecutionはActionResultを解析する前に実行し、OnResultExecutedはActionResultを解析した後に実行する.
一、Actionに適用するFilter
次に例を示します.まず、TestFilterという名前のFilterを作成します.
public class TestFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{//Action
filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuting<br/>";
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{//Action
filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuted<br/>";
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{// ActionResult
filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuting<br/>";
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{// ActionResult
filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuted<br/>";
}
}
次にアクションを作成します.
[TestFilter]// Filter Action
public ActionResult filteraction()
{
return View();
}
ビューに次のように書き込みます.
<%Session["temp"] += "View Execute<br/>"; %>
最後に他のページでSession[temp]の出力結果を得た.
TestFilter OnActionExecuting
TestFilter OnActionExecuted
TestFilter OnResultExecuting
View Execute
TestFilter OnResultExecuted
これにより、これらの実行順序も上記のようになる
二、ControllerのFilter
FilterをControllerに適用するには2つの方法があります
1.次のように、Filterを直接Controllerに適用します.
[TestFilter]
public class EiceController : Controller
{
}
2.Controller内のOnActionExecution/onActionExecuted/onResultExecution/onResultExecutedの4つのメソッドを書き換える.
いくつかのシステムのFilterについてお話しします
三、AcceptVerbs
ページのアクセス形式を指定します.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Example(){
return View();
}
ページはPost形式でのみアクセスできます.すなわち、フォームのコミットです.
四、ActionName
アクションの名前を指定します.
適用シーン:メソッド名をAction名、またはAction名をキーワードにしたくない場合は、
[ActionName("class")]
public ActionResult Example(){
return View();
}
五、NonAction
現在のメソッドは通常のメソッドのみアクションとして解析されません
六、OutputCache
Actionのキャッシュの追加
[OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult Example()
{
return View();
}
七、ValidateInput
このアクションはHtmlなどの危険コードを受け入れることができる(ASP.NET MVCはaspxで<%@Pageの属性を設定して同等のタスクを完了できない.)
[ValidateInput(false)]
public ActionResult Example()
{
return View();
}
八、ValidateAntiForgeryTokenAttribute
サーバの改ざんを検証します.
[ValidateAntiForgeryToken]
public ActionResult Example()
{
return View();
}