2012-03-22 12 views
10

में प्रत्येक एक्शन से पहले एक विधि चलाएं एमवीसी 3 में प्रत्येक एक्शन चलाने से पहले हम एक विधि कैसे चला सकते हैं?
एमवीसी 3

मैं जानता हूँ कि हम OnActionExecuting के लिए निम्न विधि का उपयोग कर सकते हैं:

public class ValidateUserSessionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ... 
    } 
} 

लेकिन हम ActionExecuting से पहले एक विधि चला सकता हूँ?

उत्तर

13

आप Controller.ExecuteCore() के लिए देख रहे हैं।

यह फ़ंक्शन प्रत्येक एक्शन कॉल से पहले कहा जाता है। आप इसे नियंत्रक या आधार नियंत्रक में ओवरराइड कर सकते हैं। उदाहरण कि Nadeem Afana से कुकीज़ पर संस्कृति आधार सेट:

public class BaseController : Controller 
    { 
     protected override void ExecuteCore() 
     { 
     string cultureName = null; 
     // Attempt to read the culture cookie from Request 
     HttpCookie cultureCookie = Request.Cookies["_culture"]; 
     if (cultureCookie != null) 
     { 
      cultureName = cultureCookie.Value; 
     } 
     else 
     { 
      if (Request.UserLanguages != null) 
      { 
       cultureName = Request.UserLanguages[0]; // obtain it from HTTP header AcceptLanguages 
      } 
      else 
      { 
       cultureName = "en-US"; // Default value 
      } 
     } 

     // Validate culture name 
     cultureName = CultureHelper.GetImplementedCulture(cultureName); // This is safe 


     // Modify current thread's cultures    
     Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName); 
     Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 

     base.ExecuteCore(); 
     } 
    } 
+2

अवहेलना BeginExecute यदि आप इसे हर जगह की जरूरत पर विचार कर सकते। i.e .: फ़ाइल अपलोड करें –

3

मैं एओपी, Postsharp या Castle Windsor में आसानी से कार्य करने के लिए सुझाव दे सकता हूं।

3

इसके अलावा, आप Global.asax में विधि Application_BeginRequest का उपयोग

+0

यह वह दृष्टिकोण है जिसका मैंने उपयोग किया है और यह बहुत अच्छा काम करता है। – asawyer

+0

मुझे विधि में 'Request.Cookies' और 'सत्र' का उपयोग करने की आवश्यकता है। लेकिन हम उन्हें 'Application_BeginRequest' में एक्सेस नहीं कर सकते हैं –