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

本文关键字:应用程序 崩溃 我的 Tempdata 使用 | 更新日期: 2023-09-27 18:22:38

我是ASP.NET的新手,正试图在Visual Studio 2015中制作的web应用程序中的两个控制器之间传递对象。该web应用程序使用的是ASP.Net 5预览模板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.Interal.DefaultHttpContext.get_Session()

我尝试过转到项目的wwwroot元素中的Web.config,并将"sessionState"对象添加到"system.Web"元素中,但这对错误没有影响。

任何帮助都将不胜感激,因为我一直在各地寻找解决方案。我希望这是我不知怎么错过的愚蠢/显而易见的事情。

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

为了使用中间件,如ASP.NET 5中的Session、Cache等,必须显式启用它们。

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

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

以及适当的会话(缓存)存储包(如下面的示例;在内存中):

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

以及在CCD_ 2服务配置中添加中间件以进行依赖解析:

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

以及在Startup.cs OWIN配置中向OWIN添加中间件:

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

确保UseSession位于MVC配置之前。

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