2015-04-22 23 views
19

我有一个使用Session的ASP.Net vNext项目。但是在尝试获取/设置会话中的值时出现此错误。无法在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配置我的应用程序使用会话像这样:

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

回答

21

所以我想通了。实际上修复很简单。由于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(); 
} 
+1

是的,这是有帮助的。我只是移动'''app.UseSession();'''在app.UseMvc();之前''' – feradz

3

好像事情再次发生变化,著名的ASP.NET会话必须在RC1不同的配置。 (否UseInMemorySession()或其他AppBuilder方法与Session有关,现在它被添加为服务)。

一般Session必须安装,配置和使用。所有这些步骤都很新颖,有点不寻常。此外,它依赖于缓存:

会议是建立在IDistributedCache顶部,因此您必须配置 这个为好,否则你会收到一个错误。

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

15

感谢@acrhist的链接帮助。

所以,如果你正在使用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,请使用“Microsoft.AspNetCore.Session”:“1.0.0”核心 – jsgoupil

相关问题