2011-07-03 11 views
40

में क्रियान्वित कर रहे हैं MVC में हम जैसेकिस क्रम में फिल्टर asp.net MVC के

[HttpPost] 
[Authorize] 
public ActionResult mymethod(){} 

HttpPost विभिन्न फिल्टर के साथ कार्रवाई के तरीकों को सजाने कर सकते हैं से MethodSelectorAttribute (शायद परोक्ष रूप से) निकला है और Authorize विशेषता ActionFilterAttribute से विरासत।

मेरा प्रश्न है: एमवीसी अनुरोध पाइपलाइन में किस क्रम में उन्हें निष्पादित किया जाता है? मैंने एमवीसी स्रोत कोड में खोज करने की कोशिश की लेकिन प्रासंगिक कोड बिट्स खोजने में असफल रहा।

+0

मैं उस क्रम को मानता हूं जिसमें उन्हें प्रतिबिंब के दौरान वापस किया जाता है जो संभवतः स्रोत में वास्तविक क्रम से प्रभावित हो सकता है। –

+0

@ हसन भाई सबसे पहले आपको देखकर अच्छा लगा, तो मेरा मानना ​​है कि एचटीपीपोस्ट एक्शनमूथसेलेक्टर है (इसकी विधि है वैलिडफोर रिवेस्ट कहा जाता है) विशेषता और प्राधिकरण कार्रवाई है फ़िल्टरर विशेषता (इसकी ऑनएक्शन एक्सेलिंग या ऑनएक्शन एक्स्क्लेटेड कहा जाता है) ताकि उन्हें अलग-अलग समय पर बुलाया जा सके। शायद HttpPost को अधिकृत करने से पहले बुलाया जाना चाहिए क्योंकि वे अलग-अलग फ़िल्टर हैं और अलग-अलग जिम्मेदारियां हैं। –

+0

ऐसा प्रतीत होता है कि मेरी धारणा गलत थी। एरंगा द्वारा दिए गए उत्तर से पता चलता है कि फ़िल्टरों के पास उनके आदेश को निर्दिष्ट करने के लिए एक तंत्र है। हालांकि चूंकि एचटीपीपोस्ट एक फ़िल्टर नहीं है जैसा दिखता है। यह किसी और चीज से पहले इसे निष्पादित करके शायद विशेष हैंडलिंग हो सकता है। फिर यह एक धारणा है। –

उत्तर

60

फिल्टर निम्न क्रम में चलाएँ:

  1. प्राधिकरण फिल्टर
  2. कार्रवाई फिल्टर
  3. रिस्पांस फिल्टर
  4. अपवाद फिल्टर

उदाहरण के लिए, प्राधिकरण फिल्टर पहले चलाने के लिए और अपवाद फिल्टर आखिरी रन प्रत्येक फ़िल्टर प्रकार के भीतर, ऑर्डर मान रन ऑर्डर निर्दिष्ट करता है। प्रत्येक फ़िल्टर प्रकार और क्रम में, स्कोप गणना मान फ़िल्टर के लिए ऑर्डर निर्दिष्ट करता है।

  1. पहले
  2. वैश्विक
  3. नियंत्रक
  4. कार्रवाई
  5. अंतिम

MSDN से प्राप्त: ये गणना निम्न फ़िल्टर गुंजाइश मूल्यों (क्रम में जिसमें वे चलाने) को परिभाषित करता है

+1

HttpPost उपर्युक्त फ़िल्टर में से कोई भी नहीं है, यह MehodSelectorAttribute –

+2

हां है, यदि कई उम्मीदवार हैं तो कार्रवाई विधि का चयन करने के लिए इसका उपयोग किया जाता है। तो यह एक मार्कर विशेषता है। फिल्टर के पहले इसका उपयोग – Eranga

+1

निष्पादित किया जाता है, कृपया अधिक जानकारी के लिए http://zahidadeel.blogspot.com/2011/07/ajaxonly-attribute-actionfilter-vs.html पर जाएं –

19

सहेजने के लिए आप कुछ समय, यह कैसे आप सेट किया गया है:,

[MyCustomContextFilter(Order=1)] 

सूचकांक 0 आधारित है ताकि आप 0, 1, 2, आदि ...

ऐसा नहीं है कि ध्यान दिया जाना चाहिए कर सकते हैं बस क्योंकि बेस क्लास पर एक फ़िल्टर एमवीसी को पहले इसे लागू करने के लिए नहीं बताता है :(।

+2

निर्दिष्ट आदेश के बिना फ़िल्टर भी ऑर्डर के साथ फ़िल्टर से पहले चलाए जाते हैं। यह फ़िल्टर प्रकार संदर्भ (प्राधिकरण, कार्रवाई, आदि) के भीतर लागू होता है। –

+0

एनबी। अपवाद फ़िल्टर रिवर्स ऑर्डर में चलाते हैं! (हाँ सच :/) – Haohmaru