2015-05-14 3 views
1

У меня есть 2 фильтра действий, где мне нужен тот, который явно должен выполняться перед другим. Мне не повезло с тем, чтобы заставить их сотрудничать и выполнять в ожидаемом порядке.ActionFilters не выполняются в ожидаемом порядке, возможно, проблема с автозагрузкой

public class RedirectSingleAttribute : ActionFilterAttrbute { 
    public UrlHelper Url { get; set; } // <= injected in OnActivating 
    public override void OnActionExecuted(ActionExectuedContext filterContext) { 
     /* ... magic ... */ 
    } 
} 

public class JsonRedirectAttribute : ActionFilterAttribute { 
    public override void OnActionExecuted(ActionExecutedContext filterContext) { 
     /* ... magic ... */ 
    } 
} 

public class SearchController : Controller { 
    [RedirectSingle(Order = 1)] 
    [JsonRedirect(Order = 2)] 
    public ActionResult Query(SearchCriteria criteria) { 
     /* some code */ 
    } 
} 

Мой модуль выглядит ...

/* ... */ 
builder.RegisterControllers(typeof(MvcApplication).Assembly); 
/* ... */ 
builder.RegisterType<RedirectSingleAttribute>(); 
builder.RegisterType<JsonRedirectAttribute>() 
    .OnActivating(c => c.Instance.Url = c.Context.Resolve<UrlHelper>()); 
/* ... */ 
builder.RegisterFilterProvider(); 

я поставил точку останова на обоих OnActionExecuted методов и JsonRedirectAttribute последовательно продолжает выполнение первого. Я попытался изменить порядок, а также попытался использовать AsActionFilterFor без успеха.

Удаление атрибутов из метода действий и использование стиля автоматической регистрации атрибутов не выполняются вообще.

/* this ended up not working all, i.e. the action filters were never invoked */ 
builder.RegisterType<RedirectSingleAttribute>() 
    .AsActionFilterFor<SearchController>(c => c.Query(default(SearchCriteria)), 1); 
builder.RegisterType<JsonRedirectAttribute>() 
    .OnActivating(c => c.Instance.Url = c.Context.Resolve<UrlHelper>()) 
    .AsActionFilterFor<SearchController>(c => c.Query(default(SearchCriteria)), 2); 
+0

Хотя я считаю, что я попытался изменить порядок, это, похоже, не так, поскольку я только что попытался изменить порядок, и они выполняются надлежащим образом. Этот пост поможет объяснить это: http://stackoverflow.com/questions/6152420/order-property-of-actionfilter-from-lowest-to-greatest-or-vice-versa – Dave

ответ

1

Вы пробовали задавать значение перечисления «Сфера» вместе со свойством «Заказ». Эта ссылка msdn может выбросить некоторый свет: https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx

Спасибо.

+0

Пожалуйста, не оставляйте ссылки только на ответы, как ссылки могут сломаться. – NathanOliver

Смежные вопросы