哪些首先在ASP.NET MVC,动作过滤器或控制器中实例化?
问题描述:
在控制器实例化之前,MVC Action Filter属性是否运行?我有一个控制器的属性,我想从ActionFilter中检查。这可能吗?哪些首先在ASP.NET MVC,动作过滤器或控制器中实例化?
答
根据专业ASP.NET MVC 1.0书,ActionFilters在控制器实例化后运行。在OnActionExecuting(ActionFilter调用的第一个方法)时,Controller上下文可用。
答
控制器将在Action Filter的OnActionExecuted和OnActionExecuting事件触发之前得到实例化。您也可以通过传递给事件处理程序的“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
}
答
抽象类System.Web.Mvc.ActionFilterAttribute(派生从该类自己ActionFilter)有4种OnXXX方法:
- OnActionExecuting
- OnActionExecuted
- OnResultExecuting
- OnResultExecuted
我觉得在OnActionExecuting你可以检查你的控制器:
YourController controller = filterContext.Controller as YourController
if(controller != null)
{
// check your controller
}