Использование Tempdata сбой моего приложения
Я очень новичок в ASP.NET и пытаюсь передать объект между двумя контроллерами в веб-приложении, которое я создаю в Visual Studio 2015. Веб-приложение использует веб-приложение ASP.NET 5 Preview Template Web ( если это помогает, я думаю, что я использую бета-код 7, а я не для ядра DNX Core 5).
Проблема, с которой я столкнулась, - это всякий раз, когда я пытаюсь вставить что-либо в переменную TempData, программа, похоже, рушится. Например, в методе "Создать" у меня есть:
[HttpPost]
public ActionResult Create(Query query)
{
switch (query.QueryTypeID)
{
case 1:
TempData["Test"] = "Test";
return RedirectToAction("Index", "EventResults");
case 2:
break;
default:
break;
}
return View();
}
В этом методе я пытаюсь добавить простую тестовую строку под ключ "test". Когда я запускаю приложение с этим инструктором TempData, я получаю сообщение об ошибке с сообщением
При обработке запроса произошла необработанная ошибка.
InvalidOperationException: сеанс не настроен для этого приложения > или запроса. Microsoft.AspNet.Http.Internal.DefaultHttpContext.get_Session()
Я попытался перейти к Web.config, расположенному в элементе wwwroot проекта, и добавить объект sessionState в элемент "system.web", но это не повлияло на ошибку.
Любая помощь будет очень оценена так, как я искал решения для этого везде. Я надеюсь, что это что-то глупое/ослепительно очевидное, что я как-то пропустил.
Ответы
Ответ 1
Чтобы использовать промежуточное программное обеспечение, такое как Session, Cache и т.д. в ASP.NET 5, вы должны включить их явно.
Включение сеанса выполняется путем добавления соответствующего пакета nuget в раздел зависимостей файлов project.json
(убедитесь, что версия пакета соответствует версиям других зависимостей, которые вы добавили):
"Microsoft.AspNet.Session": "1.0.0-*"
и соответствующий пакет хранения сеанса (кеш) (например, пример ниже, в памяти):
"Microsoft.Extensions.Caching.Memory": "1.0.0-*"
и добавление промежуточного программного обеспечения к разрешению зависимостей в конфигурации Startup.cs
Service:
public void ConfigureServices(IServiceCollection services)
{
services.AddCaching();
services.AddSession(/* options go here */);
}
и добавление промежуточного программного обеспечения в OWIN в конфигурации Startup.cs
OWIN:
public void Configure(IApplicationBuilder app)
{
app.UseSession();
//...
Убедитесь, что UseSession
находится перед конфигурацией MVC.
Ответ 2
Для Asp.Net Core убедитесь, что добавлен Asp.NetCore.Session
.
Вы можете настроить сеанс в StartUp.cs, как показано ниже.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
// Adds a default in-memory implementation of IDistributedCache.
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.CookieHttpOnly = true;
});
}
public void Configure(IApplicationBuilder app)
{
app.UseSession();
app.UseMvcWithDefaultRoute();
}