2014-11-21 59 views
0

我有一個MVC 4網絡應用程序。我在Global.asax.cs文件的MvcApplication類的「Session_Start」中定義的會話中保存了一個值。無法檢索HttpContext.Current.Session狀態的值

我想從Controller中檢索值。但它拋出了一個錯誤。

protected void Session_Start(Object sender, EventArgs e) 
     { 
      int temp = 0; 
      HttpContext.Current.Session.Add("_SessionCompany", temp); 
      Debug.WriteLine("session started"); 
     } 

在控制器的構造函數:

public LocationController() 
     { 
      if (HttpContext.Session == null) 
       Debug.WriteLine("session is null"); 
      //this.HttpContext.Session["_SessionCompany"] = (int)this.Session["_SessionCompany"] + 1; 
      //Debug.WriteLine("LocationController instantiated - " + (int)this.Session["_SessionCompany"]); 
     } 

的錯誤是對的HttpContext:

System.NullReferenceException: Object reference not set to an instance of an object. 

看來HttpContext的是空對象。

我在哪裏做錯了?

謝謝!

+0

可能重複[ASP.Net MVC控制器構造函數中的會話空](http://stackoverflow.com/questions/889516/session-null-in-asp-net-mvc-controller-constructors) – 2014-11-21 12:01:34

回答

0

您嘗試訪問的HttpContext對象位於ASP.NET MVC的基類Controller類中,該類未在控制器實例化的位置設置,而是在稍後的日期注入。

如果你想你的構造函數中訪問HttpContext對象,那麼你需要通過使用Dependency Injection(推薦解決方案)的IoC容器注入它,或者你可以直接訪問的背景下,像這樣:

using SystemWebHttpContext = System.Web.HttpContext; 

... 

public LocationController() 
{ 
    var session = SystemWebHttpContext.Current.Session; 
}