コントローラーのベースクラス、またはコントローラー/アクションに適用されているアクションフィルターのどちらでも簡単に実行できます。どちらの場合でも、アクションの前(または後)にリクエストに触れる機会が得られます。そこで、この機能を追加することができます。例えば
:
public class UserInfoAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(
ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
filterContext.Controller.ViewData["user"] = "Foo";
}
}
...
[HandleError, UserInfo]
public class HomeController : Controller
{...}
(アクション(方法)レベルでも使用することができる)
または共通のベースクラスで:
public abstract class ControllerBase : Controller
{
protected override void OnActionExecuting(
ActionExecutingContext filterContext)
{
ViewData["user"] = "Bar";
base.OnActionExecuting(filterContext);
}
}
[HandleError]
public class HomeController : ControllerBase
{...}
Thnx、私はベースクラスを試してみます。しかし、なぜOnActionExecuting()メソッドをオーバーライドするのですか?このメソッドは何をしますか?それは何の目的ですか? – Martijn
アクション(メソッド)が実行される直前に実行されます。必要に応じて、OnActionExecutedを代わりに使用することもできます.OnActionExecutedは、アクションが実行された直後に実行されます。 –
これは基本クラスに入れているので、コントローラー内での動作に影響しますか? – Martijn