9

Denetleyicim, OnActionExecuted öğesindeki eylemi tamamladıktan sonra bazı şeyler yapmaya çalışıyorum. Ancak yöntem iki kez denir. ben bu filtreyi çalıştığınızdaOnActionExecuted Web API'sında iki kez çağrılıyor

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

     //do stuff here 


    } 
} 

ve benim denetleyicisi

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

//do login stuff 
    } 

} 

, onActionExecuted Yöntem iki kez yanıt için iki kez uygulanacak yöntemle İşlemimi neden olan çağrılan

My filtre yöntemi . Bir sebep aradım ama bir çözüm bulamıyorum.

Herhangi bir Fikir?

+0

Her iki TestFilters öğesinin bir arama kaydında tetiklendiğini gösteren ilgili yığın izlemesini sağlayabilir misiniz? – Haney

+0

Kodumda da aynı şeyi görebiliyorum. Denetleyicideki bir kesme noktası ve harekete geçirilmemişse, denetleyicinin önce ateşlendiğini, ardından OnActionExectued'in iki kez ateşlendiğini gösterir. – Andiih

+13

Aynı sorunu [AttributeUsage (AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] benim için düzeltildi. – Martijn

cevap

12

yanıt yukarıda @Martijn yorumlardan geçerli:

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

Tüm krediler ona gider. (Not: Yorumu yanıt olarak eklemeye karar verirse, mesajı kaldıracağım)

+0

Benim durumumda sadece [AttributeUsage (AttributeTargets.Method | AttributeTargets. ActionFilterAttribute sınıfından türetilmiştir. – Aamol

0

Benim için sorun,/myApi/action/adresine yönlendiren/myApi/eylemini çağırıyordu ve bu, OnActionExecuted() işlevinin iki kez çalıştırılmasına neden oldu.

filterContext.Result öğesinin, daha sonra kodumuzu kullanmaya başlamak istemediğimden beri OnActionExecuted içinde RedirectResult filtrelenmiş. HTTP durum kodu, çağrıların her ikisinde de 200 olarak gösterildi, bu nedenle işe yaramayacak şekilde filtreleme yapıldı.