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

Использование 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", но это не повлияло на ошибку.

Любая помощь будет очень оценена так, как я искал решения для этого везде. Я надеюсь, что это что-то глупое/ослепительно очевидное, что я как-то пропустил.

4b9b3361

Ответ 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();
    }