0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アクションフィルタとコントローラの OnActionExecuting の呼び出し順序

Last updated at Posted at 2015-09-30

アクションフィルタとコントローラの OnActionExecuting の呼び出し順序

アクションメソッドの前後に、横断的な処理を挟むにはアクションフィルタを書く。

public virtual void OnActionExecuted(ActionExecutedContext filterContext);
public virtual void OnActionExecuting(ActionExecutingContext filterContext);
public virtual void OnResultExecuted(ResultExecutedContext filterContext);
public virtual void OnResultExecuting(ResultExecutingContext filterContext);

他方、コントローラは System.Web.Mvc.Controller を継承するので、次のメソッドをオーバーライドすることができる。

protected virtual void OnActionExecuted(ActionExecutedContext filterContext);
protected virtual void OnActionExecuting(ActionExecutingContext filterContext);
protected virtual void OnResultExecuted(ResultExecutedContext filterContext);
protected virtual void OnResultExecuting(ResultExecutingContext filterContext);

今、やりたいのはセッション情報をアクションメソッドに渡すコトなので、これはアクションフィルタを書くしかなさそうに思える。

ただ、使い途はわからないなりに、せめてどちらが先に呼び出されるかを確認しておく。

アクションフィルタとコントローラの派生クラスの各メソッドを override してログを仕掛ける。

    実験中…

無用な行を削除するとログは次のようになった。SessionAttribute の行が、アクションフィルタの出力と読めばよい。

予想と違い、ベースクラスの OnActionExecuting の方がアクションフィルタより先に呼ばれていた。ふむ。

DEBUG|2014-11-30 13:55:59,420|Controller`1       |OnActionExecuting   |IN
DEBUG|2014-11-30 13:55:59,421|SessionAttribute   |OnActionExecuting   |IN
DEBUG|2014-11-30 13:55:59,433|SessionAttribute   |OnActionExecuted    |IN
DEBUG|2014-11-30 13:55:59,433|Controller`1       |OnActionExecuted    |IN
DEBUG|2014-11-30 13:55:59,434|Controller`1       |OnResultExecuting   |IN
DEBUG|2014-11-30 13:55:59,434|SessionAttribute   |OnResultExecuting   |IN
DEBUG|2014-11-30 13:55:59,439|SessionAttribute   |OnResultExecuted    |IN
DEBUG|2014-11-30 13:55:59,439|Controller`1       |OnResultExecuted    |IN

確認した環境

  • Visual Studio Community 2015
  • ASP.NET MVC 5.2.3
  • Entity Framework 6.1.3
  • SQL Server Express LoalDb 12.0.2000.8
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?