Intereting Posts
Используя JavaScriptSerializer.DeserializeObject, как я могу получить словарь, который использует нечувствительный к регистру строковый сопоставитель? Использование Moq для тестирования абстрактного classа объявить метод всегда выдает исключение? Захват VS локальных переменных при отладке в EnvDTE Почему volatile и MemoryBarrier не препятствуют переупорядочению операций? Как передать учетные данные машине, чтобы я мог использовать Microsoft.Win32.RegistryKey.OpenRemoteBaseKey () на нем? Префикс пространства имен с помощью IXmlSerializable Как получить относительный путь к файлу в визуальной студии? Метод EncryptedXml DecryptDocument генерирует исключение «Bad Data» Обновить WPF-контроль по коду Асинхронная функция тестирования модhive C # – Обнаружение изображения лица и обрезки Правильный поиск DataGrid из TextBox в WPF с использованием MVVM Как получить доступ к конфигурации приложения из DLL? Сохранить / преобразовать .doc как .html с помощью Visual Studio 2010 Express

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

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

Исключение типа «System.InvalidOperationException» произошло в Microsoft.AspNet.Http.Core.dll, но не было обработано в коде пользователя

Дополнительная информация: сеанс не настроен для этого приложения или запроса.

Вот мой метод controllerа:

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

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

Поэтому я понял это. Исправить было довольно просто. Поскольку 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(); } 

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

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