首页 > 解决方案 > ASP.NET Core 2.2 在 DbContext 中获取 userId

问题描述

我对 ASP.NET Core 很陌生。我想使用 Entity Framework Core 和 ASP.NET Identity 创建 ASP.NET Core 2.2 WebAPI。另外,我想使用 JWT 来保护对带有令牌的 WebAPI 的访问。

我已经成功地将用户插入数据库并从我的 API 中取回令牌,并且令牌身份验证正在工作。

但是,我还想软删除数据库记录并跟踪谁删除/更新/添加了记录。测试表是国家,其中字段只有TitleDescription

到目前为止,我已经把互联网颠倒了,但没有帮助:(

我尝试过的最后一件事是(userId 是null):

标签: c#entity-frameworkasp.net-coreentity-framework-coreasp.net-identity

解决方案


尝试直接IHttpContextAccessor 注入ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<AppUser>
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor)
        : base(options)
    {
        _httpContextAccessor= httpContextAccessor;
    }

    //other methods

   private void CheckBeforeSaving()
   {        
     var userId = _httpContextAccessor?.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
     //...
   }
}

推荐阅读