2015-04-22 6 views
19

У меня есть проект ASP.Net vNext, который использует Session. Но я получаю эту ошибку, пытаясь получить/установить значения в сеансе.Невозможно использовать сеанс в ASP.Net vNext Project

Исключение типа «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(); 
    } 

Я добавил пакет KVM "Microsoft.AspNet.Session": "1.0.0-beta3" в моем project.json файле, а также и настроил мое приложение для использования сеанса через мой 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)); 
    } 

Я посмотрел документацию vNext на Github, но он не предоставляет много информации об сеансах ASP.Net. Что я делаю не так?

ответ

21

Итак, я понял это. Исправить было довольно просто. Поскольку ASP.Net последовательно добавляет middlewares в конвейер запросов, все, что мне нужно было сделать, это использовать промежуточное программное обеспечение сеанса перед использованием 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();' '' before '' 'app.UseMvc();' '' – feradz

3

Похоже, все еще раз изменилась, и хорошо известный сеанс 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.

15

Благодаря @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

Используйте «Microsoft.AspNetCore.Session»: «1.0.0», если вы находитесь на ASP.net CORE – jsgoupil

Смежные вопросы