2009-12-29 18 views

उत्तर

9

ActionExecutingContext में एक संपत्ति एक्शनडिस्क्रिप्टर है।

यदि रिटर्न प्रकार वास्तव में एक प्रतिबिंबित एक्शन डिस्क्रिप्टर है जिसे आप कास्ट करने में सक्षम होना चाहिए। एक बार जब आप एक ReflectedActionDescriptor है ...

http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.aspx

... आप तकनीक है कि कार्रवाई के नाम लेने का उपयोग कर उपयोग कर सकते हैं यह MethodInfo संपत्ति है ...

http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.methodinfo.aspx

आपको सावधान रहना चाहिए और MethodInfo प्राप्त करने के लिए इसका उपयोग करें। कई मामलों में एक कार्रवाई का नाम नियंत्रक पर विधि नाम के समान होगा, लेकिन यह हमेशा मामला नहीं होगा। यदि आप नियंत्रक की विधि पर ActionName विशेषता का उपयोग करते हैं तो आप स्पष्ट रूप से कार्रवाई का नाम सेट कर सकते हैं। इसके अतिरिक्त, एक ही क्रिया नाम के साथ, दोनों अलग-अलग हस्ताक्षरों के साथ 2 विधियां हो सकती हैं। यह आम बात है जब आपके पास एक ही क्रिया का एक GET और POST संस्करण होता है (उदा। AccountController.cs के भीतर एक ब्रांड नई एएसपी.नेट एमवीसी परियोजना में पंजीकृत रजिस्टर और लॉगऑन क्रियाएं)।

+0

MVC ढांचे में ही कोई अन्य प्रकार है कि वारिस 'ActionDescriptor' है कर रहे हैं। वास्तव में – SLaks

+0

। इसलिए, आपको हमेशा एक प्रतिबिंबित एक्शन डिस्क्रिप्टर प्राप्त करना चाहिए और मेरा दृष्टिकोण काम करेगा। मैंने एमवीसी के भविष्य के संस्करणों के लिए बीमा के रूप में "अगर" शब्द का उपयोग किया, और यह सुझाव देने के लिए कि एक्शनडिस्क्रिप्टर को डालने के लिए कोड को इस संभावना के साथ लिखा जाना चाहिए। –

+0

मुझे पता है कि यह बहुत पुराना है, लेकिन यदि आपके पास कोई कार्य/Async एक्शन विधि है, तो यह प्रतिबिंबित नहीं किया गया हैक्शन डिस्क्रिप्शन, लेकिन TaskAsyncActionDescription। इससे समस्याएं पैदा हो सकती हैं। –

1

Controller.GetType.GetMethod(actionExecutingContext.ActionName) आज़माएं।

यदि आपका कोड सीधे कार्रवाई में है, तो आप MethodBase.GetCurrentMethod() पर भी कॉल कर सकते हैं।

+1

GetMethod समाधान कैसे काम करेगा जहां एक ही नाम के साथ कई विधियां हैं? उदाहरण के लिए, लॉगऑन या रजिस्टर (दो स्वीकार करने वाला पोस्ट और अन्य जीईटी) के लिए दो ओवरलोड। साथ ही, कार्य नाम के लिए क्रिया का नाम बहुत अलग करने के लिए ActionName विशेषता का उपयोग करना संभव है। –

+2

यह नहीं होगा। आपका जवाब बहुत बेहतर है। – SLaks

1

मुझे कुछ लॉगिंग उद्देश्यों के लिए मेरे कस्टम विशेषताओं को लाने के लिए MethodInfo प्राप्त करने की आवश्यकता है।

इस विशिष्ट उपयोग के मामले में मैंने देखा कि (कम से कम एमवीसी 5 में) ActionDescriptor.GetCustomAttributes विधि मौजूद है, और यह प्रत्येक ActionDescroptor वंशजों के लिए ठीक से ओवरराइड है।

इसी प्रकार, GetParameters जैसे अन्य संबंधित विधियों, आदि

संबंधित मुद्दे