9

में दो बार बुलाया जा रहा है IActionExecuted पर कार्रवाई के साथ मेरे नियंत्रक के बाद कुछ सामान करने की कोशिश कर रहा हूं। हालांकि विधि को दो बार बुलाया जाता है।ऑनएक्शन वेब एपीआई

मेरे फिल्टर विधि

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

मेरे पास एक ही समस्या [विशेषता यूज (विशेषताएँ लक्ष्य। विधि | विशेषताएँ लक्ष्य। क्लास, अनुमति दें एकाधिक = झूठी, विरासत = सत्य)] यह मेरे लिए तय है। – 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() का कारण बन गया।

मैंने फ़िल्टर किया है कि फ़िल्टरकॉन्टेक्स्ट। रीसेट रीडायरेक्ट रीसेट ऑनएक्शन एक्सेक्टेड के भीतर है क्योंकि मुझे अपना कोड चलाने में दिलचस्पी नहीं थी। एचटीटीपी स्टेटस कोड दोनों कॉलों पर 200 के रूप में दिखाया गया है, जिससे फ़िल्टरिंग काम नहीं करेगी।