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

하나의 호출 스택에서 두 TestFilters가 실행되는 것을 보여주는 관련 스택 추적을 제공 할 수 있습니까? – 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

제 경우에는 [Are you all [AttributeUsages (AttributeTargets.Method | AttributeTargets.Class)]를 추가해야합니다. ActionFilterAttribute 클래스에서 파생됩니다. – Aamol

0

내게는/myApi/action /으로 리디렉션되는/myApi/action이 호출되어 OnActionExecuted()가 두 번 실행되는 문제가있었습니다.

필자는 코드를 실행하는 데 관심이 없었기 때문에 FilterContext.Result가 OnActionExecuted 내에서 내에서 RedirectResult 인 곳을 필터링했습니다. 두 상태 모두에서 HTTP 상태 코드가 200으로 표시되어 필터링되지 않으므로 작동하지 않습니다.