9

Sto provando a fare alcune cose dopo che il mio controller ha terminato l'azione su OnActionExecuted. Tuttavia, il metodo viene chiamato due volte.OnActionExecuted chiamato due volte nell'API Web

Il mio metodo filtro

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

     //do stuff here 


    } 
} 

e il mio controller

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

//do login stuff 
    } 

} 

quando provo questo filtro, il metodo onActionExecuted viene chiamato due volte che provoca la mia azione nel metodo da applicare due volte per la risposta . Ho cercato un motivo ma non riesco a trovare una soluzione.

Qualsiasi idea?

+0

È possibile fornire la traccia di stack pertinente che mostra che entrambi i TestFilters sono stati attivati ​​in un unico callstack? – Haney

+0

Posso vedere la stessa cosa succedere nel mio codice. Un punto di interruzione nel controller e l'onactionexectued mostrano che il controller è stato attivato per primo, quindi OnActionExectued viene attivato due volte. – Andiih

+13

Ho avuto lo stesso problema [AttributeUsage (AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] risolto per me. – Martijn

risposta

12

La risposta è da @Martijn osservazioni di cui sopra:

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

Tutti i crediti va a lui. (Nota: io rimuovere il post, se si decide di aggiungere il commento come risposta)

+0

Nel mio caso ho bisogno di aggiungere solo [AttributeUsage (AttributeTargets.Method | AttributeTargets.Class)] come resto tutto derivato dalla classe ActionFilterAttribute. – Aamol

0

Per me il problema era che stavo chiamando/myApi/action che stava reindirizzando a/myApi/action/e questo ha causato l'esecuzione di OnActionExecuted() due volte.

Ho filtrato dove filterContext.Result è RedirectResult all'interno di OnActionExecuted poiché non ero interessato a eseguire il mio codice allora. Il codice di stato HTTP ha mostrato come 200 su entrambe le chiamate, quindi il filtraggio non funzionerà.

Problemi correlati