Упорядочить свойство ActionFilter, от низшего к наибольшему или наоборот? - PullRequest
12 голосов
/ 27 мая 2011

Я определил два 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.Я что-то упустил?

Ответы [ 3 ]

23 голосов
/ 30 мая 2011

Last-in First-out order

Это ответ, который я искал.Порядок OnActionExecuted - это обратный порядок OnActionExecuting ...

1 голос
/ 30 мая 2011

Все зависит от того, что реализует каждый фильтр.

Если 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 после завершения метода действия. «

0 голосов
/ 29 ноября 2013

См. Фильтрация в ASP.NET MVC для полного объяснения того, что определяет порядок выполнения фильтров действий и их методы.

Относительно OnResultExecuted, которое, как вы сказали, используют ваши фильтры, см. Следующее:

Фильтры OnActionExecuting(ActionExecutingContext), OnResultExecuting(ResultExecutingContext) и OnAuthorization(AuthorizationContext) работают в прямом порядке. Фильтры OnActionExecuted(ActionExecutedContext), OnResultExecuting(ResultExecutingContext) и OnException(ExceptionContext) работают в обратном порядке.

Порядок на самом деле довольно сложный, так что посмотрите на статью для более подробной информации.

...