ASP.Net vNext项目中无法使用会话(Session)

21

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

类型为'System.InvalidOperationException' 的异常在Microsoft.AspNet.Http.Core.dll中发生,但未在用户代码中处理

其他信息:此应用程序或请求未配置会话。

这是我的控制器方法:

    [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配置应用程序以使用会话(Session):

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 会话的太多信息。我做错了什么吗?

3个回答

26

所以我解决了这个问题。实际上,修复方法非常简单。由于ASP.Net将中间件按顺序添加到请求管道中,我所需要做的就是在使用MVC之前使用会话中间件。更多信息请参见:https://dev59.com/cInca4cB1Zd3GeqP9lUq#29569746

修复后的代码:

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

1
是的,这很有帮助。我只是把app.UseSession();放在app.UseMvc();之前移动了一下。 - feradz

16

感谢@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())
     ....
     }

3
如果您正在使用ASP.net CORE,请使用“Microsoft.AspNetCore.Session”:“1.0.0”。 - jsgoupil

5
似乎在rc1中又有所变化,著名的ASP.NET会话需要以不同的方式进行配置。(现在不再涉及UseInMemorySession()或其他AppBuilder方法与Session相关,而是作为服务添加)。

总的来说,必须安装、配置并使用Session。所有这些步骤都是相当新颖和不寻常的。此外,它还依赖于缓存:

“会话建立在IDistributedCache之上,因此您必须配置它,否则将收到错误消息。”

以上引用来自ASP.NET 5文档。您需要做的只是按照此处描述的操作:https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接