【问题标题】:Unable to use session in ASP.Net vNext Project无法在 ASP.Net vNext 项目中使用会话
【发布时间】:2015-06-30 08:25:26
【问题描述】:

我有一个使用 Session 的 ASP.Net vNext 项目。但我在尝试获取/设置会话中的值时遇到此错误。

Microsoft.AspNet.Http.Core.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

附加信息:尚未为此应用程序或请求配置会话。

这是我的控制器方法:

    [AllowAnonymous]
    [HttpGet("/admin")]
    public IActionResult Index()
    {
        if (Context.Session.GetString("UserName") == null) // error thrown here
        {
            return RedirectToAction("Login");
        }

        return View();
    }

我还在我的project.json 文件中添加了KVM 包"Microsoft.AspNet.Session": "1.0.0-beta3",并已将我的应用程序配置为通过我的Startup.cs 使用会话,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    // code removed for brevity
    services.AddCachingServices();
    services.AddSessionServices();
}

public void Configure(IApplicationBuilder app)
    {
        app.UseMvc();
        app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30));
    }

我查看了 Github 上的 vNext 文档,但它没有提供太多关于 ASP.Net 会话的信息。我做错了什么?

【问题讨论】:

    标签: c# asp.net asp.net-mvc session


    【解决方案1】:

    所以我想通了。修复实际上非常简单。由于 ASP.Net 将中间件按顺序添加到请求管道中,因此我需要做的就是在使用 MVC 之前使用会话中间件。更多信息在这里:https://stackoverflow.com/a/29569746/832546

    固定代码:

    public void Configure(IApplicationBuilder app)
    {
        app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30));
        app.UseMvc();
    }
    

    【讨论】:

    • 是的,这很有帮助。我刚刚在app.UseMvc();之前移动了app.UseSession();
    【解决方案2】:

    感谢@acrhistof 链接的帮助。

    因此,如果您使用的是 RC1: 在 project.json 中添加这些依赖项:

     "Microsoft.AspNet.Session": "1.0.0-rc1-final",
     "Microsoft.Extensions.Caching.Memory": "1.0.0",
    

    在 Startup.cs 文件中:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCaching();
            services.AddSession();
            services.AddMvc();
        }
    

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
         app.UseSession(); //outside of dev  if (env.IsDevelopment())
         ....
         }
    

    【讨论】:

    • 如果您使用的是 ASP.net CORE,请使用 "Microsoft.AspNetCore.Session": "1.0.0"
    【解决方案3】:

    似乎事情再次发生了变化,众所周知的 ASP.NET 会话必须在 rc1.NET 中进行不同的配置。 (没有UseInMemorySession()或其他AppBuilder方法与Session相关,现在作为服务添加)。

    一般Session 必须安装、配置然后使用。所有这些步骤都是相当新的,有些不寻常。而且,它依赖于Cache:

    会话建立在IDistributedCache之上,所以你必须配置 这也是如此,否则你会收到一个错误。

    以上引用来自 ASP.NET 5 文档。您需要做的所有事情都在这里描述:https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-04
      • 2014-08-25
      • 2015-10-12
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      相关资源
      最近更新 更多