9

Ich versuche, einige Sachen zu tun, nachdem mein Controller mit der Aktion bei OnActionExecuted fertig ist. Die Methode wird jedoch zweimal aufgerufen.OnActionExecuted zweimal aufgerufen in Web-API

Meine Filtermethode

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

     //do stuff here 


    } 
} 

und mein Controller

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

//do login stuff 
    } 

} 

, wenn ich diese Filter versuche, werden die OnActionExecuted Methode genannt zweimal die meine Aktion in dem Verfahren angewandt auf die Antwort zweimal bewirkt . Ich habe nach einem Grund gesucht, kann aber keine Lösung finden.

Irgendwelche Ideen?

+0

Können Sie den relevanten Stack-Trace bereitstellen, der beide TestFilter anzeigt, die in einem Callstack gefeuert werden? – Haney

+0

Ich kann das Gleiche in meinem Code passieren. Ein Haltepunkt im Controller und der onactionexecuited zeigen, dass der Controller zuerst ausgelöst wird und OnActionExecueded dann zweimal ausgelöst wird. – Andiih

+13

Ich hatte das gleiche Problem [AttributUsage (AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, geerbt = wahr)]] reparierte es für mich. – Martijn

Antwort

12

Die Antwort ist von @Martijn Kommentare oben:

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

Alle Gutschriften ihm geht. (Hinweis: Ich werde den Beitrag entfernen, wenn er den Kommentar als Antwort hinzufügen möchte)

+0

In meinem Fall muss ich nur [AttributeUsage (AttributeTargets.Method | AttributeTargets.Class)] als Rest alles hinzufügen abgeleitet von der ActionFilterAttribute-Klasse. – Aamol

0

Für mich war das Problem, dass ich/myApi/action anrief, die auf/myApi/action/umgeleitet wurde, und dies führte dazu, dass OnActionExecuted() zweimal ausgeführt wurde.

Ich herausgefiltert, wo filterContext.Result ist RedirectResult in OnActionExecuted, da ich nicht daran interessiert war, meinen Code dann auszuführen. Der HTTP-Statuscode wurde in beiden Aufrufen als 200 angezeigt, sodass das Filtern nicht funktioniert.

Verwandte Themen