我开始学习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()。
我试过了:
- 添加这一行到我的
Startup.cs
:
app.UseSession();
- 在
Startup.cs
中不需要调用app.UseMvc()
。但我试着使用它(只是调用app.UseMvc()
抛出异常。经过一番研究,我在Stack Overflow的答案中找到了下面这行:
app.UseMvc(options => options.EnableEndpointRouting = false);
使用
Session.Keys.Contains<string>()
代替HttpContext.Session.Keys.Contains<string>()
。但是它没有找到一个名为Session
的属性。上网。我没有找到任何好的答案。
现在我问了我自己的问题。
问题解决了。我将这些片段添加到Startup.cs
:
services.AddControllersWithViews();
services.AddMvc(options => options.EnableEndpointRouting = false).AddSessionStateTempDataProvider();
services.AddSession();
和
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSession();
app.UseMvcWithDefaultRoute();