如何在实体框架 DbContext 中获取用户的 ID



我需要跟踪网络核心 2.0 EF 中的数据库更改。这一切都有效,但我不知道如何在 DbContext 中获取用户 ID。我需要获取 UserId 以向用户分配更改。我不能简单地跑_userManager.GetUserId(HttpContext.User).ToString();.有什么建议吗?提前感谢您的帮助。

Startup.csConfigureServices方法中添加:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddEntityFrameworkSqlServer();

services.AddEntityFrameworkSqlServer() 位将服务解析程序添加到上下文中,允许您在上下文中使用 GetService 扩展方法。

然后,在您的上下文中,您可以执行以下操作:

var httpContextAccessor = this.GetService<IHttpContextAccessor>();

结果可能为 null,特别是如果上下文未在 Web 应用程序中运行(即在迁移期间、使用上下文的控制台应用程序等(。因此,您应该进行适当的空检查。下面使用 C# 6 的空条件运算符:

var userId = httpContextAccessor?.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);

然后,userId将具有当前登录用户的 ID 或为 null。

最新更新