2010-09-13 11 views
8

में शून्य है, मेरे पास ASP.NET MVC अनुप्रयोग में ControllerBase क्लास है। अन्य नियंत्रक ControllerBase से प्राप्त होते हैं।HttpContext.Current.User ControllerBase (asp.net mvc)

मैं HttpContext.User.Identity.Name तक पहुंच बनाना चाहता हूं, लेकिन HttpContextnull है। क्या बात है?

public ControllerBase() 
     { 
      var dataManager=new DataManager(); 
      if (HttpContext.User.Identity.IsAuthenticated) // throws error 
      {      
       ViewData["assets"] = ud.BalanceFreeze + ud.Balance + ud.BalanceRealty; 
       ViewData["onaccount"] = ud.Balance; 
       ViewData["pending"] = ud.BalanceFreeze; 
       ViewData["inrealty"] = ud.BalanceRealty; 
      } 

उत्तर

11

अपने ControllerBase में इस घटना के लिए अपने कोड जोड़ने का प्रयास करें:

protected override void Initialize(RequestContext requestContext){ 

} 
+1

मुझे पता चला कि मुझे बेस कॉल करने की आवश्यकता है। इस ओवरराइड के अंदर प्रारंभ करें (requestContext) अन्यथा मुझे बाद में NullReferenceException मिलेगा। – HitLikeAHammer

5

आपका नियंत्रक HttpContext से पहले का निर्माण हो जाता है ASP.NET द्वारा निर्धारित किया गया है। निक की तरह, आपको इस कोड को अपनी कक्षा में एक ओवरराइड विधि में रखना होगा।

मैं यह भी इंगित करता हूं कि एचटीपीकॉन्टेक्स्ट के आधार पर सीधे इस वर्ग को बढ़ाने वाले आपके किसी भी नियंत्रक पर यूनिट परीक्षण करना असंभव हो जाएगा। यही कारण है कि ControllerBase कक्षा में कई विधियों (निष्पादन विधि की तरह) एक तर्क के रूप में RequestContext लेते हैं। आप कह सकते हैं:

protected override void Execute(System.Web.Routing.RequestContext requestContext) 
{ 
    var currentUser = requestContext.HttpContext.User; 
    ... 
} 

... जिससे यूनिट परीक्षण उद्देश्यों के लिए "नकली" संदर्भों के साथ आपके नियंत्रकों को बनाने और निष्पादित करना संभव हो जाता है।