【问题标题】:How to implement Session State in ASP.NET vNext MVC 6如何在 ASP.NET vNext MVC 6 中实现会话状态
【发布时间】:2014-08-01 09:43:00
【问题描述】:

在 Visual Studio 2014 的 ASP.NET vNext 中,我正在尝试在 MVC 6.I 中实现会话状态 我没有在 Visual Studio 中获得任何 Intellisense 来实现它。请建议我如何 使用它。

【问题讨论】:

  • “实现会话状态”是什么意思。会话状态是框架的一部分,它已经实现了。您是否尝试使用会话状态?如果是这样,什么不起作用?
  • @Rune,是的,我正在尝试在 MVC 6 中使用会话状态,但它对我不起作用。意味着我没有在 MVC 6 中获取会话属性。就像我得到 ViewBag、ViewData、Cookies 等. 在 Visual Studio 2014 intelisense 中,但没有得到 Session。请告诉我如何使用它?谢谢。
  • 我建议您不要使用 ASP.NET 的应用程序结构来实现“会话状态”。通过页面本身和数据库上的内容使您的网站成为 RESTful 并保留任何会话信息。
  • @ManishKumar 我已经更新了我的答案,因为 ASP.NET vNext 有一个新的会话状态中间件,您可以查看。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

2014 年 11 月 2 日更新

ASP.NET 团队已开始构建新的会话状态中间件,以在 ASP.NET vNext 中启用会话状态。您可以查看Session repo,其中既有Session middleware,也有sample

要在应用中启用会话状态,请调用:

app.UseSession();

并从中读取/写入:

var some_value = context.Session.GetInt("some_value").Value;
some_value++;
context.Session.SetInt("some_value", some_value);

原答案

How to do server side state management in vNext Web Applications 基本相同的问题 - 会话状态尚未在 ASP.NET vNext 中实现。

正如其他人所指出的,TempData 不是与会话状态相同的东西,它只是建立在它之上。 (而且它还没有在 ASP.NET vNext 中实现。)

【讨论】:

  • 会话中间件和示例链接已关闭。
  • @Nick-ACNB 感谢您的提醒!我们将源代码从 Caching 存储库移至新的 Session 存储库,因此我更新了本文中的链接。
  • 我认为你应该更新你的答案,因为context现在使用大写C ContextGetIntSetInt函数不再存在
  • @Tareck117 你在哪里看到它应该是大写的 C 上下文?而且我仍然看到GetInt/SetInt(虽然有讨论是否应该将它们更改为GetInt32/SetInt32,但没有进行任何更改)。
  • 嗯...我这么说是因为我包含了Microsoft.AspNet.Session 包并使用了@Michael Matejko 的答案,如果不使用ContextContext.Sessionproperty 是 ISessionCollection。但从你的评论来看,我想我这样做是错误的...... :)
【解决方案2】:

我写了一篇博文,概述了How to Implement Sessions in ASP.NET 5, MVC6 的详细信息。 为 Beta8 更新

归结为:

  • 添加Microsoft.AspNet.Sessionnuget 包。
  • services.AddSession() 添加到startup.cs
  • services.AddCaching() 添加到startup.cs
  • app.UseSession() 添加到startup.cs
  • 在控制器内部使用HttpContext.Session
  • 注入 IHttpContextAccessor 以访问控制器外部的 HttpContext

【讨论】:

  • app.UseInMemorySession 在 Beta 8 中不存在
【解决方案3】:

只需安装包

Install-Package Microsoft.AspNet.Session

然后放

app.UseSession();

在您的 Startup.cs 中。正如 Eilon 所指出的,它将通过

Context.Session.SetString("key", stringValue);

【讨论】:

  • 我无法访问我的 startup.cs 中的 Context,它驻留在什么命名空间中?
  • @Nick-ACNB 您可以在控制器方法中访问它
猜你喜欢
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2021-03-03
相关资源
最近更新 更多