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

19

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

Теги:
asp.net-mvc
session

3 ответа

21
Лучший ответ

Итак, я понял это. Исправить было довольно просто. Поскольку ASP.Net последовательно добавляет middlewares в конвейер запросов, все, что мне нужно было сделать, это использовать промежуточное программное обеспечение сеанса перед использованием MVC. Подробнее здесь: https://stackoverflow.com/questions/29420262/sessions-in-asp-net-core-1-0

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

public void Configure(IApplicationBuilder app)
{
    app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30));
    app.UseMvc();
}
  • 1
    Да, это было полезно. Я только что переместил app.UseSession(); перед app.UseMvc();
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
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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню