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;
我正在尝试在我的 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;