abh*_*hek 6 c# .net-core asp.net-core
我在 .Net core 中使用 Session,但是我能够在 Controller 中设置和获取 Session 数据,例如
HttpContext.Session.SetString("User", "True");
var user = HttpContext.Session.GetString("User");
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在具体类中使用相同的代码时,我无法这样做。它不会在HttpContext.Session之后 显示GetString或SetString。
之后不起作用
HttpContext.Session
Run Code Online (Sandbox Code Playgroud)
请帮忙谢谢
要访问非控制器类中的会话 -
首先在Startup.ConfigureServices中注册如下服务
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)现在,在 Startup.ConfigureServices 中注册一个要访问会话的类(例如 - SessionManager)。
services.AddScoped<SessionManager>();
Run Code Online (Sandbox Code Playgroud)现在,在 SessionManager 类中,添加以下代码。
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _session;
public SessionManager(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_session = _httpContextAccessor.HttpContext.Session;
}
Run Code Online (Sandbox Code Playgroud)上面的代码通过依赖注入接收 IHttpContextAccessor 对象,然后将 Sessions 存储在局部变量中。
这是因为HttpContext是 的成员Controller,并且在控制器之外,它是类型名称。请参阅访问 ASP.NET Core 中的当前 HttpContext如何将其注入IHttpContextAccessor到类中并从那里访问会话。
但是,通常不建议在类库中使用会话。您最好将特定值传递给您的库调用。因此,您不必访问库方法中的设置,而是:
// controller code
var user = HttpContext.Session.GetString("User");
var libraryResult = _fooLibrary.Bar(user);
HttpContext.Session.SetString("UserResult", libraryResult);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6233 次 |
| 最近记录: |