2011-08-12 16 views
12
[ApiBasicAuthorize] 
public ActionResult SignIn() 
{ 

} 

मेरे पास यह कस्टम फ़िल्टर है जिसे एपीबासिक प्राधिकृत कहा जाता है। नियंत्रक कार्रवाई साइनइन के अंदर ApiBasicAuthorize के डेटा (गुण आदि) तक पहुंच बनाना संभव है?कंट्रोलर एक्शन में एक्शन फ़िल्टर का डेटा एक्सेस करना

यदि नहीं, तो मैं फ़िल्टर से नियंत्रक कार्रवाई में डेटा कैसे पास करूं?

+0

जो विधि आप authrize_Attribute में अधिभावी कर रहे हैं। आप मार्ग शब्दकोश में डेटा जोड़ सकते हैं, हमें अपना कुछ और कोड दिखाएं। –

+0

मैं ऑनअधिकरण (प्राधिकरण कॉन्टेक्स्ट फ़िल्टरकॉन्टेक्स्ट) विधि को ओवरराइड कर रहा हूं। –

उत्तर

17

HttpContext ऑब्जेक्ट से जुड़ी वस्तुओं को एक शब्दकोश कहा जाता है। अनुरोध के दौरान घटकों में साझा की गई वस्तुओं को संग्रहीत करने के लिए इस शब्दकोश का प्रयोग करें।

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    filterContext.HttpContext.Items["key"] = "Save it for later"; 

    base.OnAuthorization(filterContext); 
} 
फिर अपने कोड में कहीं भी बाद में अनुरोध में

...

var value = HttpContext.Current.Items["key"]; 
+1

यहां तक ​​कि प्रवीण का जवाब भी काम करता है, लेकिन मैंने इसे एक उत्तर के रूप में चिह्नित किया है क्योंकि HttpContext.Items रूटडाटा के बजाय इस उद्देश्य के लिए अधिक उपयुक्त है। वैल्यू –

+2

@ गॉथ्स - हाय, क्या आप कृपया बता सकते हैं कि आपने 'HttpContext.Items' को 'रूटडाटा' क्यों चुना '? यह भी देखें: http://stackoverflow.com/a/1809541/538387 धन्यवाद – Tohid

+0

हाय @ गॉथ्स, हाँ, मैं भी उत्सुक हूं कि पूर्व के बाद की तुलना में अधिक "उचित" क्यों है? ऐसा लगता है कि वे दोनों एक ही उद्देश्य की सेवा कर रहे हैं, इसलिए सोच रहे हैं कि सीमाएं या इरादे दोनों को अलग करते हैं? – Funka

5
public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var rd = filterContext.RouteData; 

     //add data to route 
     rd.Values["key"]="Hello"; 

     base.OnAuthorization(filterContext); 
    } 



public ActionResult(string key) 
{ 
//key= Hello 
return View(); 
} 
संबंधित मुद्दे