2012-03-01 11 views
43

वेबफॉर्म में हम MasterPage.cs में एक विधि लिख सकते हैं और यह प्रत्येक अनुरोध में भाग गया।
उदाहरण के लिए:एमवीसी, सी # में प्रत्येक अनुरोध में एक विधि चलाएं?

MasterPage.cs 
-------------- 
protected void Page_Load(object sender, EventArgs e) 
{ 
    CheckCookie(); 
} 

हम कैसे MVC में कुछ इस तरह कर सकते हैं?

+1

हो सकता है कि इस http://stackoverflow.com/questions/2650269/how-do-i-get-certain-code-to-execute-before-: के लिए विशेष क्रिया या नियंत्रकों बस इस विशेषता के साथ उन्हें सजाने प्रत्येक-सिंगल-कंट्रोलर-एक्शन-इन- – V4Vendetta

+1

आप नियंत्रक –

+0

पर एक्शनफ़िल्टर एट्रिब्यूट डालना चाहते हैं, मैं als o देखें कि विधि क्या कर रही है और यदि इसे अभी भी एमवीसी में जरूरी है, तो कोई नई बात यह नहीं है कि नई तकनीक अप्रचलित हो। – TheRealTy

उत्तर

80

ASP.NET MVC में आप एक custom global action filter लिख सकते हैं।


अद्यतन:

यहाँ टिप्पणी अनुभाग में अनुरोध के रूप में इस तरह के फिल्टर की तरह लग सकता है कि कैसे का एक उदाहरण है:

public class MyActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var fooCookie = filterContext.HttpContext.Request.Cookies["foo"]; 
     // TODO: do something with the foo cookie 
    } 
} 

आप कुकी के मूल्य के आधार प्राधिकरण निष्पादित करना चाहते हैं , IAuthorizationFilter इंटरफ़ेस को कार्यान्वित करने के लिए और अधिक सही होगा:

public class MyActionFilterAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var fooCookie = filterContext.HttpContext.Request.Cookies["foo"]; 

     if (fooCookie == null || fooCookie.Value != "foo bar") 
     { 
      filterContext.Result = new HttpUnauthorizedResult(); 
     } 
    } 
} 

आप प्रत्येक नियंत्रक कार्रवाई के लिए प्रत्येक अनुरोध पर चलने के लिए इस कार्रवाई फिल्टर चाहते हैं तो आप एक वैश्विक कार्रवाई RegisterGlobalFilters विधि में अपने Global.asax में फिल्टर के रूप में यह रजिस्टर कर सकते हैं:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new MyActionFilterAttribute()); 
} 

और यह केवल निष्पादित करने के लिए अगर आप की जरूरत है

[MyActionFilter] 
public ActionResult SomeAction() 
{ 
    ... 
} 
+0

में एक से अधिक निष्पादित की जा सकती है क्या आप इसके लिए नमूना लिख ​​सकते हैं? –

+0

@ मोहम्मद, निश्चित रूप से, मैंने सोचा था कि आपने उस लेख को पढ़ा है जिसे मैंने अपने उत्तर में जोड़ा है और वहां दिखाए गए नमूना कोड को लागू करने का प्रयास किया है। जाहिर है, मैं यह सोचने में गलत था। तो मैंने एक उदाहरण दिखाने के लिए अपना जवाब अपडेट कर दिया है। –

+0

धन्यवाद दोस्त, लेकिन एक सवाल। हम 'MyActionFilterAttribute' में किसी कार्रवाई पर रीडायरेक्ट कैसे कर सकते हैं? –

6

आप इस्तेमाल कर सकते हैं Global.asax Application_AcquireRequestState विधि है जो हर अनुरोध पर बुलाया जाएगा:

protected void Application_AcquireRequestState(object sender, EventArgs e) 
{ 
    //... 
} 
+2

तो, क्या हम उपर्युक्त विधि से कुकी और सत्र तक पहुंच सकते हैं? –

+1

हां आप कर सकते हैं। लेकिन यह विधि प्रति अनुरोध –

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