2015-04-02 101 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;