2015-04-22 18 views
19

Tôi có một dự án ASP.Net vNext sử dụng Phiên. Nhưng tôi nhận được lỗi này trong khi cố gắng để có được/thiết lập các giá trị trong phiên.Không thể sử dụng phiên trong ASP.Net vNext Project

Một ngoại lệ của loại 'System.InvalidOperationException' xảy ra ở Microsoft.AspNet.Http.Core.dll nhưng không được xử lý theo mã người dùng

Thông tin thêm: phiên chưa được cấu hình cho ứng dụng này hoặc yêu cầu .

Dưới đây là phương pháp điều khiển của tôi:

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

     return View(); 
    } 

Tôi đã thêm các KVM gói "Microsoft.AspNet.Session": "1.0.0-beta3" trong tập tin project.json của tôi như là tốt và đã cấu hình ứng dụng của tôi sử dụng phiên qua Startup.cs tôi như vậy:

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)); 
    } 

Tôi đã xem tài liệu vNext trên Github nhưng nó không cung cấp nhiều thông tin về các phiên ASP.Net. Tôi đang làm gì sai?

Trả lời

21

Vì vậy, tôi đã tìm ra điều này. Việc sửa chữa khá đơn giản thực sự. Vì ASP.Net thêm các phần tử trung gian theo thứ tự vào đường ống yêu cầu, tất cả những gì tôi cần làm là sử dụng phần mềm trung gian phiên trước khi sử dụng MVC. Xem thêm thông tin ở đây: https://stackoverflow.com/a/29569746/832546

Cố định mã:

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

Có này rất hữu ích. Tôi vừa chuyển '' 'app.UseSession();' '' trước '' 'app.UseMvc();' '' – feradz

3

Nó có vẻ như mọi thứ đã thay đổi một lần nữa và phiên ASP.NET nổi tiếng phải được cấu hình khác nhau trong rc1. (không có phương thức UseInMemorySession() hoặc các phương thức khác AppBuilder có liên quan đến Session, hiện tại nó được thêm làm dịch vụ).

Nói chung Session phải được cài đặt, định cấu hình và sau đó được sử dụng. Tất cả các bước này khá mới và hơi khác thường. Hơn nữa, nó phụ thuộc vào bộ nhớ cache:

Session được xây dựng trên IDistributedCache, vì vậy bạn phải cấu hình này là tốt, nếu không bạn sẽ nhận được một lỗi.

Báo giá ở trên là từ ASP.NET 5 tài liệu. Tất cả những gì bạn cần làm được mô tả ở đây: https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session.

15

Nhờ @acrhistof liên kết đã giúp.

Vì vậy, nếu bạn đang sử dụng RC1: thêm này những phụ thuộc vào project.json:

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

trong Startup.cs file:

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

Sử dụng "Microsoft.AspNetCore.Session": "1.0.0" nếu bạn đang sử dụng ASP.net CỐT LÕI – jsgoupil

Các vấn đề liên quan