2015-04-02 176 views
3

我想在我的ASP.NET核心1.0(vNEXT)項目中使用會話。這是我的代碼的樣子。在ASP.NET核心1.0會話

public class Startup 
{ 
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 
    public void ConfigureServices(IServiceCollection services) 
    { 
     //-- Enabled MVC Pattern 
     services.AddMvc(); 

     //-- Enable Session handling 
     services.AddCachingServices(); 
     services.AddSessionServices(); 
    } 

    public void Configure(IApplicationBuilder app) 
    { 
     //-- User MVC 
     app.UseMvc(); 

     //-- Use Session 
     app.UseSession(); 
     app.UseInMemorySession(); 
    } 
} 

但是現在我被卡住了。我不知道如何在控制器或頁面中設置或獲取會話中的數據。我已經嘗試了this.Context.Session。但它不是實例,所以當我嘗試訪問這些屬性時,就會拋出invalidexception。

任何人都有一個代碼示例如何讓這個工作。

在此先感謝。

編輯:

這裏是一個screendump的base.context.Session看起來像我的控制器。 enter image description here

而我沒有的SetString()和GetString(),只能在設定的()和TryGet()... ...方法

這是怎麼我的project.json文件看起來喜歡。

"version": "1.0.0-*", 
"dependencies": { 
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta3", 
    "Microsoft.AspNet.Mvc": "6.0.0-beta3", 
    "Microsoft.AspNet.Session": "1.0.0-beta3" 

}, 
+3

加入會話中間件* *之前,任何需要它。否則,它將不能在請求管道中的正確位置(中間件本質上是按順序運行)。 – Eilon 2015-04-09 16:12:27

+0

ohh ...謝謝。我在我的startup.cs文件中切換位置,並將UseMVC()放在最後,現在它可以工作。謝謝!!! – 2015-04-10 19:35:24

+0

如果你想接受它,我改變了我的評論,以便其他人更容易看到它。 – Eilon 2015-04-10 19:58:56

回答

7

我的意見更改爲一個答案:

任何需要它之前加入會議中間件。否則,它在請求管道中的正確位置將不可用。

中間件本質上是按順序運行的 - 您添加的每個中間件組件都按順序運行。所以如果MVC在會話之前運行,那麼MVC無法從會話中間件中看到會話獲取。

1

您是否已將依賴關係添加到您的project.json文件中?

"Microsoft.AspNet.Session": "1.0.0-beta3" 

一旦你這樣做,你應該能夠使用會話這樣的:

Context.Session.SetString("MyName", "Mike"); 
Context.Session.SetInt("MyAge", 21); 
ViewBag.Name = Context.Session.GetString("MyName"); 
ViewBag.Age = Context.Session.GetInt("MyAge"); 
+0

我試着在我的項目中添加Microsoft.AspNet.Session依賴項。 json文件,但是project.json沒有識別,而Context.Session.SetInt(等等)仍然不被識別。是否還有其他依賴項可能會丟失? – jbyrd 2015-04-06 13:36:22

+1

你有在控制器中使用Microsoft.AspNet.Http嗎? – 2015-04-07 04:45:25

+0

使用Microsoft.AspNet.Http修復,所以我得到了GetString(),SetString()方法。但是我的Session對象仍然沒有實例化。所以當我嘗試訪問這個對象時,我仍然得到了InvalidException異常。 – 2015-04-09 07:13:28

-1

使用NuGet安裝「Microsoft.AspNetCore.Http.Extensions」以訪問SetString()和GetString()方法。

0

在我的情況下HttpContext.Session.SetString()只有在添加using Microsoft.AspNetCore.Http;後出現。最初我只有using Microsoft.AspNetCore.Mvc;。總括來說...你需要這兩種使用報表Session.SetString的()可用在ASP.Net MVC核心1.1:

using Microsoft.AspNetCore.Mvc; 
using Microsoft.AspNetCore.Http;