Do ASP.Net MVC Controller Attributes Execute Before or After the Action? -


निम्नलिखित कोड पर विचार करें:

  [प्रमाणीकरण (ऑर्डर = 1)] सार्वजनिक एक्शनरसेंट कुछएक्शनटैटअर्जर्सअटिफिकेशन () {Var मॉडल = नया SomeViewModel (); // एक प्रमाणीकृत सत्र / उपयोगकर्ता के साथ कुछ करो ... वापसी देखें (मॉडल); }  

क्या प्रमाणिकरण विशेषता को SomeActionThatRequiresAuthentication विधि के अंदर या उसके बाद कोड के क्रियान्वित करता है?

मैं यह पूछ रहा हूँ क्योंकि मेरे पास एक विशेषता है जो इस तरह से कुछ करती है:

  सार्वजनिक वर्ग प्रमाणन: कस्टमअधिकृतविवरण {सार्वजनिक ओवरराइड शून्य ऑनऑस्ट्रिकेशन (ऑथराइजेशन कॉन्टैक्ट फ़िल्टर फिल्टर) {यदि! HttpContext.Current.Response.IsRequestBeingRedirected) HttpContext.Current.Response.Redirect (ViewUtil.Actions.User.LogOnUrl ()); }}  

जैसा कि आप देख सकते हैं कि यूजर को प्रमाणीकृत नहीं किया गया है, तो उपयोगकर्ता को रीडायरेक्ट किया जाएगा। हालांकि ऐसा प्रतीत होता है कि कार्रवाई केवल निष्पादित होने के बाद ही रीडायरेक्ट होती है। यह समस्याएं पैदा कर रहा है क्योंकि मैंने एक्शन निष्पादित करते समय उपयोगकर्ता को प्रमाणित किया है। सबसे पहले मुझे यह समझने की आवश्यकता है कि क्या कार्य निष्पादित होने से पहले या बाद में होने वाले गुण हैं, या क्या मैं कार्यप्रवाह पूरी तरह से गलत सोच रहा हूं?

धन्यवाद, पॉल


इसे और कुछ शोध करने के बाद यह स्पष्ट है कि filterContext.Result को इसके लिए काम करना है मेरे प्राधिकृत विशेषता में एक छोटा परिवर्तन करने के बाद, यह अब काम कर रहा है:

  सार्वजनिक वर्ग प्रमाणिकता: कस्टमअधिकृतविशेषता {सार्वजनिक ओवरराइड शून्य परमाणुकरण (प्राधिकरण सम्मिलित करें फ़िल्टरकॉन्टेक्स्ट) {यदि (! उपयोगकर्ता सेवा.आईएसएप्रमाणित & amp; ! HttpContext.Current.Response.IsRequestBeingRedirected) filterContext.Result = नया रीडायरेक्ट रिजल्ट (ViewUtil.Actions.User.LogOnUrl ()); }}  

आप सही हैं, गुण से पहले निष्पादित करें सवाल में कार्रवाई, इसलिए [प्रमाणीकरण] को पहले निश्चित रूप से निष्पादित करना चाहिए और यदि उपयोगकर्ता को प्रमाणित नहीं किया गया है, तो क्रिया कोड को कभी भी निष्पादित नहीं किया जाता है जब तक उपयोगकर्ता को पुनः निर्देशित नहीं किया जाता है, प्रमाणीकृत करता है और इस क्रिया ।

टिप्पणी के आधार पर संपादित करें : MVC फ्रेमवर्क OnAuthorizatrion विधि (स्रोत) रीडायरेक्ट नहीं करता है, लेकिन 'एचटीटीपीयूनाधिकृत रेश्ल्ट' के लिए filterContext.Result सेट करता है () '(जो सिर्फ एक 401 स्थिति कोड सेट करता है)। उस परिणाम के कारण उपयोगकर्ता को लॉगिन पृष्ठ पर रीडायरेक्ट करने के लिए प्रमाणीकरण मॉड्यूल का कारण बनता है। यह मानते हुए कि आपके बाकी का कस्टम कार्यान्वयन मानक है (आधार विधियों को ओवरराइड या कॉल नहीं करना) इसे बदलना

  एचटीपीपीटीईएक्स। वर्तमान। रिस्पॉन्स। रीडायरेक्ट (देखेंयूटीएलएक्शन। यूजर। लोगऑनयूआरएल ());  

इस (या कुछ इसी तरह, जब तक आप परिणाम निर्धारित करते हैं)

  filterContext.Result = new HttpUnauthorizedResult ();  

को चाल करना चाहिए, कम से कम सड़क पर आगे बढ़ें।


Comments

Popular posts from this blog

Eclipse CDT variable colors in editor -

AJAX doesn't send POST query -

wpf - Custom Message Box Advice -