ASP.NET Core MVC 中的会话

use*_*414 4 c# asp.net-mvc asp.net-core-mvc

我正在将 ASP.NET MVC 应用程序迁移到 ASP.NET Core MVC。

在 ASP.NET MVC 中,我使用一些Session变量来存储或获取值,例如:

Session["UserID"] = user.UserName;
Session["Role"] = role[0].ROLE_DESCRIPTION;
ViewData["LEVEL"] = Session["LEVEL"];
Run Code Online (Sandbox Code Playgroud)

但转换后,出现错误:

当前上下文中不存在名称“Session”

另外,我还需要在文件中对此进行替换.cshtml

var UserName = "@Session["Name"]";
Run Code Online (Sandbox Code Playgroud)

ASP.NET Core MVC 中是否有其他方法可以在不改变行为的情况下存储或获取这些变量的值?

Xin*_*hen 8

您需要在配置文件中添加会话中间件

public void ConfigureServices(IServiceCollection services)  
{  
     //........
    services.AddDistributedMemoryCache();  
    services.AddSession(options => {  
        options.IdleTimeout = TimeSpan.FromMinutes(1);//You can set Time   
    });  
    services.AddMvc();  
} 

public void ConfigureServices(IServiceCollection services)
{
    //......
    app.UseSession();
    //......
}
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中,你可以

//set session 

HttpContext.Session.SetString(SessionName, "Jarvik");  
HttpContext.Session.SetInt32(SessionAge, 24);

//get session

ViewBag.Name = HttpContext.Session.GetString(SessionName);  
ViewBag.Age = HttpContext.Session.GetInt32(SessionAge); 
  
Run Code Online (Sandbox Code Playgroud)