我定义了两个ActionFilters:
[DefaultResources(Order = 2)]
[RenderTemplate(Order = 1)]
令我惊讶的是DefaultResources是在RenderTemplate之前执行的。但根据MSDN文档,它应该反之亦然:
[Filter1(Order = 2)]
[Filter2(Order = 3)]
[Filter3(Order = 1)]
public void Index()
{
View("Index");
}
在此示例中,操作筛选器将按以下顺序执行:Filter3,Filter1,然后Filter2。
我正在使用.NET 4.并通过方法OnActionExecuted进行比较。我错过了什么吗?
这是我正在寻找的答案。 OnActionExecuted的顺序是OnActionExecuting的颠倒顺序......
这完全取决于每个过滤器实现的内容。
如果DefaultResource实现OnActionExecuting或OnActionExecuted,那么如果RenderTemplate没有,它将首先触发。
有关更多详情,请参阅
http://www.gregshackles.com/2010/09/custom-ordering-of-action-filters-in-asp-net-mvc/
和
http://msdn.microsoft.com/en-us/library/dd381609.aspx
“ASP.NET MVC框架在调用任何标记有操作过滤器属性的操作方法之前将调用操作过滤器的OnActionExecuting方法。同样,框架将在操作方法完成后调用OnActionExecuted方法。”
有关确定动作过滤器及其方法的执行顺序的内容的完整说明,请参阅Filtering in ASP.NET MVC。
关于OnResultExecuted
,您说您的过滤器正在使用,请参阅以下内容:
qazxsw poi,qazxsw poi和qazxsw poi过滤器以正向顺序运行。
OnActionExecuting(ActionExecutingContext)
,OnResultExecuting(ResultExecutingContext)
和OnAuthorization(AuthorizationContext)
过滤器以相反的顺序运行。
排序实际上非常复杂,因此请查看文章以获取更多详细信息。