我有两个动作过滤器"ActionFilter1“和"ActionFilter2,
public class ActionFilter1 : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext.Current.Application["Order"] += "Action 1: OnActionExecuting <br/>";
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
HttpContext.Current.Application["Order"] += "Action 1: OnActionExecuted <br/>";
}
}
public class ActionFilter2 : FilterAttribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext.Current.Application["Order"] += "Action 2: OnActionExecuting <br/>";
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
HttpContext.Current.Application["Order"] += "Action 2: OnActionExecuted <br/>";
}
}我在带有"Order“的控制器操作方法上应用了这两个过滤器,
[ActionFilter1(Order = 1)]
[ActionFilter2(Order = 2)]
public ActionResult Index()
{
return View();
}在浏览器上执行Page时,执行的动作筛选器的输出如下,
行动1: OnActionExecuting
行动2: OnActionExecuting
行动2: OnActionExecuted
行动1: OnActionExecuted
问题-为什么"OnActionExecuted“以相反的顺序执行,而"OnActionExecuting”顺序是正确的,因为我提供了属性?
谢谢,
发布于 2015-08-16 10:04:58
这是记录在案的行为。这是链接论MSDN
OnActionExecuting(ActionExecutingContext)、OnResultExecuting(ResultExecutingContext)和OnAuthorization(AuthorizationContext)过滤器按前向顺序运行。OnActionExecuted(ActionExecutedContext)、OnResultExecuting(ResultExecutingContext)和OnException(ExceptionContext)过滤器按相反顺序运行。
https://stackoverflow.com/questions/32033868
复制相似问题