未配置会话.如何修复?



我开始学习ASP。净MVC。现在我试图使身份验证功能不使用类成员,类FormsAuthentication等。我将当前用户名保存到会话数据中。

检查用户是否通过身份验证,我使用以下代码:

if (!HttpContext.Session.Keys.Contains<string>("authentication")) { // It throws an exception
return RedirectToAction("Login", "Account");
}

这段代码的第一行抛出了一个异常,带有以下消息(我的应用显示了消息和目标站点):

会话未配置。在"Microsoft.AspNetCore.SessionState。"HttpSessionState Microsoft.AspNetCore.HttpContext.get_Session()。

我试过了:

  1. 添加这一行到我的Startup.cs:
app.UseSession();
  1. Startup.cs中不需要调用app.UseMvc()。但我试着使用它(只是调用app.UseMvc()抛出异常。经过一番研究,我在Stack Overflow的答案中找到了下面这行:
app.UseMvc(options => options.EnableEndpointRouting = false);
  1. 使用Session.Keys.Contains<string>()代替HttpContext.Session.Keys.Contains<string>()。但是它没有找到一个名为Session的属性。

  2. 上网。我没有找到任何好的答案。

  3. 现在我问了我自己的问题。

问题解决了。我将这些片段添加到Startup.cs:

services.AddControllersWithViews();
services.AddMvc(options => options.EnableEndpointRouting = false).AddSessionStateTempDataProvider();
services.AddSession();

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSession();
app.UseMvcWithDefaultRoute();