第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

ASP.NET Core 2.2在DbContext中獲取userId

ASP.NET Core 2.2在DbContext中獲取userId

C#
開滿天機(jī) 2023-09-16 17:11:35
我對(duì) ASP.NET Core 很陌生。我想使用 Entity Framework Core 和 ASP.NET Identity 創(chuàng)建 ASP.NET Core 2.2 WebAPI。另外,我想使用 JWT 來(lái)通過(guò)令牌保護(hù)對(duì)該 WebAPI 的訪問(wèn)。我已成功將用戶插入數(shù)據(jù)庫(kù)并從 API 取回令牌,并且令牌身份驗(yàn)證正在運(yùn)行。但是,我還想軟刪除數(shù)據(jù)庫(kù)記錄并跟蹤誰(shuí)刪除/更新/添加了記錄。其測(cè)試表是“國(guó)家”,其中字段只有Title和Description。到目前為止,我已經(jīng)把互聯(lián)網(wǎng)顛倒了,但沒(méi)有幫助:(我嘗試過(guò)的最后一件事是(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 回答

?
狐的傳說(shuō)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

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

     //...

   }

}


查看完整回答
反對(duì) 回復(fù) 2023-09-16
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

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


首先,您需要在 Startup.cs 中注冊(cè)


services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

然后為您服務(wù)


private readonly IHttpContextAccessor _httpContextAccessor;


public UserService(

    IHttpContextAccessor httpContextAccessor)

{


}


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



查看完整回答
反對(duì) 回復(fù) 2023-09-16
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

private async Task<ApplicationUser> GetUserDetailsAnsyc()

{

  return await userManager.GetUserAnsync(HttpContext.User);

}


var user = await GetUserDetailsAnsyc();

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


查看完整回答
反對(duì) 回復(fù) 2023-09-16
  • 3 回答
  • 0 關(guān)注
  • 175 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)