Подтвердить что ты не робот

Невозможно использовать сеанс в ASP.Net vNext Project

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

Исключение типа '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. Что я делаю неправильно?

4b9b3361

Ответ 1

Итак, я понял это. Исправить было довольно просто. Поскольку ASP.Net последовательно добавляет middlewares в конвейер запросов, все, что мне нужно было сделать, это использовать промежуточное программное обеспечение сеанса перед использованием MVC. Подробнее здесь: fooobar.com/questions/278251/...

Фиксированный код:

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

Ответ 2

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

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