【问题标题】:Sessions in ASP.NET Core 1.0ASP.NET Core 1.0 中的会话
【发布时间】:2017-07-26 23:49:04
【问题描述】:

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

},

【问题讨论】:

  • 添加会话中间件之前任何需要它。否则它将无法在请求管道中的正确位置使用(中间件本质上是按顺序运行的)。
  • 哦...谢谢。我在我的 startup.cs 文件中切换位置,并将 UseMVC() 放在最后,现在它可以工作了。谢谢!!!
  • 如果您想接受,我将评论更改为答案,以便其他人更容易看到。
  • 这里有更详细的教程:benjii.me/2015/07/…

标签: session asp.net-core


【解决方案1】:

将我的评论更改为答案:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我尝试在我的 project.json 文件中添加 Microsoft.AspNet.Session 依赖项,但 project.json 无法识别,并且 Context.Session.SetInt (等)仍然无法识别.我可能会缺少另一个依赖项吗?
    • 你的控制器中有using Microsoft.AspNet.Http;吗?
    • 修复了使用 Microsoft.AspNet.Http 的问题,因此我得到了 GetString()、SetString() 方法。但是我的 Session 对象仍然没有被实例化。所以我在尝试访问对象时仍然会抛出 InvalidException。
    • 你试图如何访问你的会话对象?
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 1970-01-01
        相关资源
        最近更新 更多