ASP.NET 核心 1.0 中的会话

Sessions in ASP.NET Core 1.0

我正在尝试在我的 ASP.NET Core 1.0 (vNEXT) 项目中使用 Session。这就是我的代码的样子。

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。但它没有实例化,所以当我尝试访问该属性时会抛出一个无效异常。

任何人都有关于如何让它工作的代码示例。

提前致谢。

编辑:

这是一个屏幕截图 base.context.Session 在我的控制器中的样子。

而且我没有 SetString() 和 GetString(),只有 Set() 和 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"

},

您是否已将依赖项添加到您的 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");

将我的评论更改为答案:

在任何需要它的东西之前添加会话中间件。否则它将无法在请求管道中的正确位置使用。

中间件本质上是 运行 顺序的 - 您使用 .UseXyz() 添加的每个中间件组件都是 运行 顺序的。所以如果MVC在Session之前运行s,那么MVC是看不到从Session中间件获取session的。

使用 NuGet 安装 "Microsoft.AspNetCore.Http.Extensions" 以访问 SetString() 和 GetString() 方法。

在我的例子中 HttpContext.Session.SetString() 仅在添加 using Microsoft.AspNetCore.Http; 后出现。最初我只有 using Microsoft.AspNetCore.Mvc;。回顾一下……您需要 Session.SetString() 的这两个 using 语句在 ASP.Net MVC Core 1.1 中可用:

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