c# - 如何将当前用户会话信息从 Web 应用程序传递到 asp.net 核心中的业务层
问题描述
如何将我当前的用户会话信息从 web 应用程序传递到 asp.net core 中的业务层?
我曾尝试将会话信息从控制器构造函数传递到业务逻辑层对象,但是我发现会话的 null 异常,因为在请求未完成之前会话未初始化。
实际上,在我的项目中,我正在使用 DI,我只想从中传递会话信息,UI -> BL -> DA
以便我可以根据用户会话信息决定在 DA 中使用哪个连接字符串,还想在我的 Add 中使用当前用户 ID和编辑操作以维护操作的历史记录。
所有 DA 和 BL 服务都使用 DI 进行配置,并且使用 DI 注入服务。
public class SystemUserController : BaseController
{
private readonly IHttpContextAccessor _httpContextAccessor;
public BL.ISystemUserService _systemUserService { get; }
public SystemUserController(BL.ISystemUserService systemUserService, IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_systemUserService = systemUserService;
_systemUserService.Session = new RepositorySession(_httpContextAccessor.HttpContext.Session.CurrentUser().SystemUserId,DatabaseConnection.CONFIG);
}
解决方案
您无法访问业务层中的会话值。
如果要维护操作历史记录,则需要在 Web 项目中调用该方法,而不是在 BL(业务层)中。
推荐阅读
- jqgrid - 可以使用 html 标签更改 jqgrid 行布局吗?
- cgal - CGAL 枚举/识别网格边界
- python - 在 django 中安装 mysqlclient 时出现以下错误
- python - 如何从每月重新采样到每年并返回到每月值 = 每年的每月?
- javascript - 失败的道具类型:道具`onPress`在`Button`中标记为必填,但其值为`undefined`
- oracle - TOAD 可以选择创建插入脚本来添加新数据吗?
- c - 有没有办法控制gets() 或fgets() 函数何时(或何处)开始接受输入?
- javascript - 在两个对象数组之间相交并仅保留匹配的元素并根据对象的键删除不匹配的元素
- r - 存储在R中列表中的矩阵的列矩阵乘法?
- python - 有没有比将 str 映射到 float 然后映射到 int 更好的方法?