2009-03-16 13 views
6

पर एएसपी.नेट-एमवीसी में एक एक्शनफिल्टर लागू कर सकते हैं। मैं प्रत्येक नियंत्रक पर - मेरे आवेदन में प्रत्येक क्रिया के लिए एएसपी.नेट एमवीसी में ActionFilter लागू करना चाहता हूं।क्या आप प्रत्येक कार्रवाई

क्या यह प्रत्येक एक्शन रिसैट विधि को लागू किए बिना ऐसा करने का कोई तरीका है?

उत्तर

9

हां, आप यह कर सकते हैं लेकिन यह बॉक्स से बाहर काम करने का तरीका नहीं है। निम्नलिखित मैं था:

  1. एक आधार नियंत्रक वर्ग बनाएँ और अपने नियंत्रकों के सभी से यह
  2. वारिस एक कार्रवाई फिल्टर विशेषता बनाएँ और यह FilterAttribute और IActionFilter से विरासत है
  3. के साथ अपने आधार नियंत्रक वर्ग डेकोरेट

    public class SetCultureAttribute : FilterAttribute, IActionFilter 
    { 
        #region IActionFilter implementation 
    
        public void OnActionExecuted(ActionExecutedContext filterContext) 
        { 
         //logic goes here 
        } 
    
        public void OnActionExecuting(ActionExecutingContext filterContext) 
        { 
         //or logic goes here 
        } 
    
        #endregion IActionFilter implementation 
    } 
    
    : अपने नए कार्रवाई फिल्टर विशेषता

यहाँ कार्रवाई फिल्टर विशेषता का नमूना दिया गया

[SetCulture] 
public class ControllerBase : Controller 
{ 
    ... 
} 

इस विधि के उपयोग के रूप में लंबे अपने नियंत्रक वर्गों ControllerBase से तो SetCulture कार्रवाई फिल्टर हमेशा निष्पादित किया जाएगा विरासत के रूप में:

यहाँ इस विशेषता के साथ आधार नियंत्रक वर्ग का एक नमूना है। यदि आप थोड़ा और विस्तार चाहते हैं तो मेरे पास इस on my blog पर एक पूर्ण नमूना और पोस्ट है।

आशा है कि मदद करता है!

+0

यह केवल ActionResults को प्रभावित करता है है? या यह अन्य परिणाम प्रकारों को भी प्रभावित करता है? JsonResult, FileResult, आदि? –

0

आपको इसे हर क्रिया पर लागू करने की आवश्यकता नहीं है, आप इसे प्रत्येक नियंत्रक पर लागू कर सकते हैं (यानी कक्षा पर विशेषता डालें, विधि नहीं)।

या, जैसा कि इयान का उल्लेख है, आप इसे आधार नियंत्रक वर्ग पर रख सकते हैं और उसके बाद उस नियंत्रक से विस्तार कर सकते हैं।

4

कैसे चीजें बेहतर हो ... 2 साल बाद हम

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorElmahAttribute()); 
    } 
+0

बेसलो - आप इसे कहां से कॉल करेंगे? या रखो? Global.asax में –

+0

। –

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