2010-05-14 13 views
6

मैं केवल एएसपी.नेट एमवीसी के लिए एक नवागंतुक हूं और मुझे यकीन नहीं है कि एक निश्चित कार्य को "सही तरीके" कैसे प्राप्त किया जाए।एएसपी.नेट एमवीसी प्राधिकृत एट्रिब्यूट एक्शन मोड में मूल्य गुजर रहा है?

अनिवार्य रूप से, मैं लॉग इन उपयोगकर्ता को HttpContext.User.Identity में संग्रहीत करता हूं और कुछ कस्टम प्रमाणीकरण करने के लिए EnhancedAuthorizeAttribute लिखा है।

ओवर्रिडन OnAuthorization विधि में, मेरा डोमेन मॉडल डाटाबेस को हिट करता है यह सुनिश्चित करने के लिए कि वर्तमान उपयोगकर्ता आईडी मार्ग में पारित हो सकता है "बैचकोड"। प्रोटोटाइप है:

ReviewGroup GetReviewGroupFromBatchCode(string batchCode); 

यह अशक्त वापस आ जाएगी, तो उपयोगकर्ता ReviewGroup और OnAuthorization उपयोग नहीं कर सकते तो पहुँच से इनकार करते हैं।

अब, मुझे पता है कि सजाए गए एक्शन विधि को केवल प्राधिकृत होने पर ही निष्पादित किया जाएगा, लेकिन मैं फिर से समीक्षा समूह प्राप्त करने के लिए डेटाबेस को दूसरी बार हिट नहीं करना चाहता हूं।

मैं HttpContext.Items["reviewGroup"] में समीक्षा समूह को संग्रहीत करने और इस समय नियंत्रक से इसे एक्सेस करने के बारे में सोच रहा हूं।

क्या यह एक व्यवहार्य समाधान है, या मैं गलत रास्ते पर हूं?

धन्यवाद!

उत्तर

1

HttpContext.Items केवल अनुरोध की अवधि के लिए जीवित है। आप लंबे समय के लिए यह बनाए रखना चाहते हैं, तो आप उस में

क) सत्र रखना चाहिए - अच्छा

ख) प्रोफ़ाइल - न लाभ

ग) कुकी देखते हैं - अनुशंसित नहीं

घ) डेटाबेस हर मारा - filterContext.RouteData.DataTokens में

यह स्टोर ठीक होना चाहिए?

+0

ठीक है, मुझे एक से अधिक अनुरोधों के लिए समीक्षा समूह ऑब्जेक्ट की आवश्यकता नहीं है। असल में, मुझे इस ऑब्जेक्ट को पास करना है (AuthorizeAttribute.OnAuthorization() में प्राप्त किया गया है ActionMethod() पर। –

0

जब तक आप ReviewGroup से बहुत बड़ा चयन नहीं करते हैं या आपके पास एक विशाल डेटाबेस है, तो दूसरा डेटाबेस हिट किसी समस्या का अधिक नहीं होगा। चुनिंदा डेटाबेस विशेष रूप से उचित रूप से अनुक्रमित तालिकाओं के साथ चुनने में बहुत ही कुशल हैं।

मेरे अनुभव में, यह प्राधिकरण करने का एक सबसे अच्छा तरीका है और इस तरह की एक विधि है कि मैंने अपने अनुप्रयोगों में विशिष्ट कार्रवाइयों को कैसे अधिकृत किया।

तो संक्षेप में, मैं दूसरी डेटाबेस हिट के बारे में चिंता नहीं करता।

1

वैकल्पिक रूप से, डेटाबेस को मारने से बचने के लिए सबसे अच्छे तरीकों में से एक, और सबसे आसान, कैशिंग है। इसे पुनर्प्राप्त करें, इसे कैश में चिपकाएं। यदि यह फिर से जरूरी है तो यह पहले से ही स्मृति में है और कोई डीबी हिट की आवश्यकता नहीं है। यदि नहीं, तो जब कैश गुंजाइश से बाहर हो जाता है, तो वस्तु भी होगी।