亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP.NET Core 2.2在DbContext中獲取userId

ASP.NET Core 2.2在DbContext中獲取userId

C#
開滿天機 2023-09-16 17:11:35
我對 ASP.NET Core 很陌生。我想使用 Entity Framework Core 和 ASP.NET Identity 創建 ASP.NET Core 2.2 WebAPI。另外,我想使用 JWT 來通過令牌保護對該 WebAPI 的訪問。我已成功將用戶插入數據庫并從 API 取回令牌,并且令牌身份驗證正在運行。但是,我還想軟刪除數據庫記錄并跟蹤誰刪除/更新/添加了記錄。其測試表是“國家”,其中字段只有Title和Description。到目前為止,我已經把互聯網顛倒了,但沒有幫助:(我嘗試過的最后一件事是(userId 是null):在startup.cs中:services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();在我的 AppDbContext.cs 中public class AppDbContext : IdentityDbContext<AppUser>{    public AppDbContext(DbContextOptions options) : base(options)    {    }    public DbSet<AppUser> AppUsers { get; set; }    public DbSet<Country> Countries { get; set; } // just for testing    protected override void OnModelCreating(ModelBuilder builder)    {        base.OnModelCreating(builder);        // TODO - IGNORE THIS        //builder.Entity<AppUser>().Property<bool>("IsDeleted");        //builder.Entity<AppUser>().HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);    }    public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))    {        CheckBeforeSaving();        return (await base.SaveChangesAsync(true, cancellationToken).ConfigureAwait(false));    }    private void CheckBeforeSaving()    {        var httpContextAccessor = this.GetService<IHttpContextAccessor>();        var userId = httpContextAccessor?.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);        foreach (var entry in ChangeTracker.Entries())        {            switch (entry.State)            {                case EntityState.Detached:                    break;                case EntityState.Unchanged:                    break;                case EntityState.Deleted:                    entry.State = EntityState.Modified;                    entry.CurrentValues["IsDeleted"] = true;                    entry.CurrentValues["DeletedBy"] = userId;                    entry.CurrentValues["Deleted"] = DateTime.Now;                    break;            }        }    }}}
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

嘗試直接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);

     //...

   }

}


查看完整回答
反對 回復 2023-09-16
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

這是我在 .net core 2.2 中獲取用戶 ID 的方法


首先,您需要在 Startup.cs 中注冊


services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

然后為您服務


private readonly IHttpContextAccessor _httpContextAccessor;


public UserService(

    IHttpContextAccessor httpContextAccessor)

{


}


var currentUserGuid = _httpContextAccessor?.HttpContext?.User?.FindFirst(UserClaimsKey.Sub)?.Value;



查看完整回答
反對 回復 2023-09-16
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

private async Task<ApplicationUser> GetUserDetailsAnsyc()

{

  return await userManager.GetUserAnsync(HttpContext.User);

}


var user = await GetUserDetailsAnsyc();

Console.WriteLine(user.Id.ToString());


查看完整回答
反對 回復 2023-09-16
  • 3 回答
  • 0 關注
  • 151 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號