无法在ASP.Net vNext项目中使用会话

hyd*_*yde 20 c# asp.net asp.net-mvc session

我有一个使用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();
    }
Run Code Online (Sandbox Code Playgroud)

我已经"Microsoft.AspNet.Session": "1.0.0-beta3"在我的project.json文件中添加了KVM包,并将我的应用程序配置为通过我的方式使用会话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));
    }
Run Code Online (Sandbox Code Playgroud)

我查看了Github上的vNext文档,但它没有提供有关ASP.Net会话的大量信息.我究竟做错了什么?

hyd*_*yde 25

所以我想出来了.实际上修复非常简单.由于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();
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ink 15

感谢@acrhistof链接帮助.

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

 "Microsoft.AspNet.Session": "1.0.0-rc1-final",
 "Microsoft.Extensions.Caching.Memory": "1.0.0",
Run Code Online (Sandbox Code Playgroud)

在Startup.cs文件中:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCaching();
        services.AddSession();
        services.AddMvc();
    }
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您使用的是ASP.net CORE,请使用"Microsoft.AspNetCore.Session":"1.0.0" (3认同)

Ale*_*tov 5

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

通常Session必须安装、配置和使用。所有这些步骤都很新,而且有些不寻常。此外,它取决于缓存:

Session 建立在 之上IDistributedCache,因此您也必须对其进行配置,否则您将收到错误消息。

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