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

Asp.net mvc 在ASP.NET MVC、动作过滤器或控制器中,哪个先实例化?,asp.net-mvc,Asp.net Mvc,MVC操作过滤器属性是否在控制器实例化之前运行?我有一个控制器的属性,我想从ActionFilter检查它。这可能吗?根据专业的ASP.NET MVC 1.0书籍,ActionFilters在控制器实例化后运行。到OnActionExecuting(ActionFilter调用的第一个方法)时,控制器上下文可用。在触发操作筛选器的OnActionExecuted和OnActionExecuting事件之前,控制器将被实例化。您还可以通过传递给事件处理程序的“filterContext”参数访问控

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

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

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

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
}

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

  • OnActionExecuting
  • 已执行的操作
  • OnResultExecuting
  • OnResultExecuted
我认为在OnActionExecuting中,您可以检查控制器:

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