使用Tempdata会使我的应用程序崩溃

时间:2015-11-19 20:46:01

标签: c# asp.net visual-studio-2015

我是ASP.NET的新手,我试图在我在Visual Studio 2015中制作的Web应用程序中的两个控制器之间传递对象.Web应用程序正在使用ASP.Net 5预览模板Web应用程序(如果它有帮助,我想我使用的是beta代码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();
    }

在该方法中,我尝试在键#34; test"下添加一个简单的测试字符串。当我在那里运行带有TempData语句的应用程序时,我收到一条错误消息,指出

  

处理请求时发生未处理的异常。

     

InvalidOperationException:尚未为此应用程序>或请求配置会话。   Microsoft.AspNet.Http.Internal.DefaultHttpContext.get_Session()

我已尝试访问位于项目的wwwroot元素中的Web.config并添加" sessionState"将对象转换为" system.web"元素,但这对错误没有影响。

任何帮助都会非常受欢迎,因为我一直在寻找解决方案。我希望它有点愚蠢/令人目眩,我不知何故错过了。

2 个答案:

答案 0 :(得分:38)

为了在ASP.NET 5中使用中间件,例如Session,Cache等,您必须明确启用它们。

通过在project.json文件的依赖项部分添加相应的nuget包来完成启用会话(确保包版本与您添加的其他依赖项的版本匹配):

"Microsoft.AspNet.Session": "1.0.0-*"

以及相应的会话(缓存)存储包(如下例所示;在内存中):

"Microsoft.Extensions.Caching.Memory": "1.0.0-*"

并将中间件添加到Startup.cs服务配置中的依赖项解析:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCaching();
    services.AddSession(/* options go here */);
}

并在Startup.cs OWIN配置中将中间件添加到OWIN:

public void Configure(IApplicationBuilder app)
{
    app.UseSession();
    //...

确保在 MVC配置之前UseSession

答案 1 :(得分:6)

对于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();
    }