哪个首先在ASP.NET MVC,动作过滤器或控制器中实例化?

时间:2009-05-28 21:32:39

标签: asp.net-mvc

在实例化控制器之前,是否运行MVC操作过滤器属性?我有一个控制器的属性,我想从ActionFilter检查。这可能吗?

3 个答案:

答案 0 :(得分:4)

根据Professional ASP.NET MVC 1.0一书,ActionFilters在实例化控制器后运行。到OnActionExecuting时(ActionFilter调用的第一个方法),Controller上下文可用。

答案 1 :(得分:2)

在动作过滤器的OnActionExecuted和OnActionExecuting事件被触发之前,Controller将被实例化。您还可以通过传递给事件处理程序的“filterContext”参数访问Controller。

public class TestActionAttribute : FilterAttribute, IActionFilter
{
    #region IActionFilter Members

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var controller = filterContext.Controller;
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var controller = filterContext.Controller;
    }

    #endregion
}

答案 2 :(得分:1)

抽象类System.Web.Mvc.ActionFilterAttribute(从这个类派生自己的ActionFilter)有4个OnXXX方法:

  • OnActionExecuting
  • OnActionExecuted
  • OnResultExecuting
  • OnResultExecuted

我认为在OnActionExecuting中你可以检查你的控制器:

YourController controller = filterContext.Controller as YourController
if(controller != null)
{
    // check your controller
}