asp.net-core - 如何访问类库.Net Core 5中的会话
问题描述
有没有办法HttpContext.session
在类库中访问?(我正在使用.Net Core 5)我已经完成了configuration
所有设置并且还在使用microsoft.AspNetCore.Http
,但我仍然无法访问会话变量。如果没有办法做到这一点,那么执行需要当前用户 ID/身份的操作的最佳方式是什么?
解决方案
正如@King King 回答的那样,您可以将其IHttpContextAccessor
注入课堂。
步骤 1 添加会话服务
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddSession();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseAuthorization();
app.UseSession();
app.UseEndpoints(endpoints =>
...
}
步骤 2 自定义类中的访问会话
public class SessionTest
{
private readonly IHttpContextAccessor _httpContextAccessor;
private ISession _session => _httpContextAccessor.HttpContext.Session;
public SessionTest(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void setSession()
{
_session.SetString("Test", "Hello World!");
}
public void getSession()
{
var message = _session.GetString("Test");
...
}
}
步骤 3 通过自定义类访问会话
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _session;
public HomeController(IHttpContextAccessor httpContextAccessor,ILogger<HomeController> logger)
{
_logger = logger;
_httpContextAccessor = httpContextAccessor;
_session = _httpContextAccessor.HttpContext.Session;
}
public IActionResult Index()
{
SessionTest session = new SessionTest(_httpContextAccessor);
session.setSession();
session.getSession();
return View();
}
}
推荐阅读
- javascript - Object.getOwnPropertyDescriptors 不是函数
- ruby-on-rails - 如何在 Rails 模型中添加外键关联?
- c++ - MATLAB 由于 calllib(C++ .h 文件和 FORTRAN .dll)而崩溃
- javascript - 从 express-handlebars 获取数据到我的 javascript 文件
- docker - 如何减少构建上下文
- reactjs - 我如何在 reactJS 上制作 lib 文件
- node.js - 使用 Express Nodejs 在浏览器中输出
- php - 遍历目录并使用 PHP 获取文件并将每个文件夹文件包装在 ul li 元素中
- django - 排除所有并保留一个 Django 查询
- javascript - VSCode HTML缩进,同一行结束标记