एंड्री सही है - यह शून्य है क्योंकि एएसपी.नेट एमवीसी फ्रेमवर्क के तहत चलते समय, एचटीपीकॉन्टेक्स्ट (और इसलिए एचटीपी कॉन्टेक्स्ट सत्र) सेट नहीं होता है जब नियंत्रक वर्ग का निर्माण किया जा सकता है जैसा कि आप उम्मीद कर सकते हैं, लेकिन यह सेट (" इंजेक्शन ") बाद में नियंत्रकबिल्डर वर्ग द्वारा। यदि आप जीवन चक्र की बेहतर समझ चाहते हैं तो आप या तो एएसपी.नेट एमवीसी ढांचे को खींच सकते हैं (स्रोत उपलब्ध है), या देखें: this page
यदि आपको सत्र तक पहुंचने की आवश्यकता है तो एक तरफ ओवरराइड करना होगा "OnActionExecuting" विधि और वहां पहुंचें, क्योंकि यह उस समय उपलब्ध होगा।
हालांकि, जैसा कि आंद्रेई सुझाव दे रहा है, यदि आपका कोड सत्र पर निर्भर है तो संभवतः यूनिट परीक्षण लिखना मुश्किल हो सकता है, इसलिए शायद आप एक सहायक वर्ग में सत्र को लपेटने पर विचार कर सकते हैं जिसे बाद में एक के लिए बदल दिया जा सकता है यूनिट परीक्षणों के तहत चलते समय अलग-अलग, गैर-वेब संस्करण, इसलिए वेब से अपने नियंत्रक को डी-युग्मन करना।
System.Web.HttpContext.Current.Session
मानक चेतावनी है कि इस संभावित रूप से आपके नियंत्रक के testability कम कर देता है के साथ:
स्रोत
2009-07-31 13:09:12
मुझे यकीन नहीं है कि यह HttpContext के बारे में उचित बयान है। यह वास्तव में पूरे प्रवाह की शुरुआत में सही बनाया गया। आप यहां विस्तृत प्रवाह के बारे में कुछ पढ़ सकते हैं http://www.beletsky.net/2011/06/inside-aspnet-mvc-route-to-mvchanlder.html या आप परावर्तक का उपयोग कर सकते हैं और httpContext को तत्काल स्थापित कर सकते हैं जब आप स्वयं को ढूंढ सकते हैं - fanspruntime.cs में इसकी लगभग 1556 लाइन। –
@AlexeyShcherbak इसे पहले से ही बनाया जा सकता है - ओपी इस बारे में है कि यह एमवीसी नियंत्रक की सत्र संपत्ति पर सेट किया गया है या नहीं। यानी सार्वजनिक HttpSessionStateBase सत्र {प्राप्त करें; } System.Web.Mvc.Controller पर ये अलग-अलग चीजें हैं। – MemeDeveloper