我在.Net核心中使用Session,但是我可以在Controller中设置和获取会话数据
HttpContext.Session.SetString("User", "True");
var user = HttpContext.Session.GetString("User");
但是当我试图在具体的类中使用相同的代码时,我无法这样做。它不会在 HttpContext.Session 之后显示 GetString 或 SetString 。
之后无效
HttpContext.Session
请帮忙 感谢
答案 0 :(得分:2)
那是因为HttpContext
是Controller
的成员,而在控制器之外,它是一个类型名称。请参阅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)
要访问非控制器类中的会话-
首先,在Startup.ConfigureServices
中注册以下服务 services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
现在,在Startup.ConfigureServices中注册要访问该会话的类(示例-SessionManager)。
services.AddScoped<SessionManager>();
现在,在SessionManager类中,添加以下代码。
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _session;
public SessionManager(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_session = _httpContextAccessor.HttpContext.Session;
}
上面的代码通过依赖项注入接收IHttpContextAccessor对象,然后将Sessions存储在局部变量中。