.Net核心使用课堂课程

时间:2018-05-23 09:15:37

标签: c# asp.net-core .net-core

我在.Net核心中使用Session,但是我可以在Controller中设置和获取会话数据

HttpContext.Session.SetString("User", "True");
var user = HttpContext.Session.GetString("User");

但是当我试图在具体的类中使用相同的代码时,我无法这样做。它不会在 HttpContext.Session 之后显示 GetString SetString

之后无效
HttpContext.Session

请帮忙 感谢

2 个答案:

答案 0 :(得分:2)

那是因为HttpContextController的成员,而在控制器之外,它是一个类型名称。请参阅Access the current HttpContext in ASP.NET Core如何将IHttpContextAccessor注入课程并从那里访问会话。

但是,在类库中使用会话通常是不可取的。您最好将特定的传递给库调用。因此,不要访问库方法中的设置,而是执行以下操作:

// controller code

var user = HttpContext.Session.GetString("User");
var libraryResult = _fooLibrary.Bar(user);
HttpContext.Session.SetString("UserResult", libraryResult);

答案 1 :(得分:0)

要访问非控制器类中的会话-

  1. 首先,在Startup.ConfigureServices

    中注册以下服务
      services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
    
  2. 现在,在Startup.ConfigureServices中注册要访问该会话的类(示例-SessionManager)。

      services.AddScoped<SessionManager>(); 
    
  3. 现在,在SessionManager类中,添加以下代码。

      private readonly IHttpContextAccessor _httpContextAccessor;    
      private readonly ISession _session;    
      public SessionManager(IHttpContextAccessor httpContextAccessor)    
      {    
             _httpContextAccessor = httpContextAccessor;    
             _session = _httpContextAccessor.HttpContext.Session;    
       }  
    

上面的代码通过依赖项注入接收IHttpContextAccessor对象,然后将Sessions存储在局部变量中。