2015-04-22 74 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

相關問題