我是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"元素,但这对错误没有影响。
任何帮助都会非常受欢迎,因为我一直在寻找解决方案。我希望它有点愚蠢/令人目眩,我不知何故错过了。
答案 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();
}