9

Я пытаюсь сделать что-то после того, как мой контроллер будет выполнен с действием OnActionExecuted. Однако метод вызывается дважды.OnActionExecuted, вызываемый дважды в API веб-интерфейса

Мой метод фильтр

public class TestFilter: ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 

     //do stuff here 


    } 
} 

и мой контроллер

[TestFilter] 
    public class BaseController : ApiController 
{ 
public LoginResponseDTO Login(LoginRequestDTO loginRequestDTO) 
    { 

//do login stuff 
    } 

} 

, когда я попробовать этот фильтр, то метод onActionExecuted вызывается дважды, который вызывает мое действие в методе следует применять дважды в ответ , Я искал причину, но не могу найти решение.

Любые идеи?

+0

Можете ли вы предоставить соответствующую трассировку стека, которая показывает, что оба тестовых фильтра запускаются в один столбец? – Haney

+0

Я вижу то же самое, что происходит в моем коде. Точка останова в контроллере и onactionexectued показывает, что контроллер запускается первым, тогда OnActionExectued запускается дважды. – Andiih

+13

У меня была та же проблема [AttributeUsage (AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] исправил это для меня. – Martijn

ответ

12

Ответ от комментариев @Martijn выше:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] 
public class TestFilter: ActionFilterAttribute 

Все кредиты идет к нему. (Примечание: я удалю сообщение, если он решит добавить комментарий в ответ)

+0

В моем случае мне нужно добавить только [AttributeUsage (AttributeTargets.Method | AttributeTargets.Class)] как все остальное из класса ActionFilterAttribute. – Aamol

0

Потенциальное решение этой проблемы, касающееся регистрации фильтров действий, которое можно зарегистрировать дважды, можно найти здесь: WebApi Action filter called twice.

0

Для меня проблема заключалась в том, что я вызывал/myApi/action, который перенаправлялся на/myApi/action /, и это вызывало OnActionExecuted() для запуска дважды.

Я отфильтровывал, где filterContext.Result является RedirectResult внутри OnAction Выполнено, так как тогда меня не интересовал запуск моего кода. Код состояния HTTP отображался как 200 на обоих вызовах, поэтому фильтрация по ним не будет работать.