繁体   English   中英

.NET 核心 Web API:获取 Z594C103F2C6E04C30C18AB059F031 数据库之外的当前登录用户

[英].NET core Web API: Get currently logged in user outside of controller - Database First approach

我需要让当前登录的用户在 controller 之外进行审计日志记录。 我在 .NET 核心 3.1 API 项目中使用数据库优先方法 这就是为什么我创建了一个新的上下文 class 派生自 MyContext class 来处理审计的原因。 在这里,我现在想获取用户信息。 我使用 JWT 基于声明的身份验证。

在下面的 class“ MyNewContext ”中,我将IHttpContextAccessor添加到 Startup.cs( services.AddHttpContextAccessor(); )以在“ MyNewContext ” class 中使用它,但是当调用构造函数时,用户或声明对象是空的。

当在 controller 中使用 IHttpContextAccessor 时,我似乎只能获得用户 object。 此外,如果我为 IHttpContextAccessor 创建服务 class,则在 controller 内调用时,它只有用户 object。

public class MyNewContext : MyContext
{
    private static string _userGuid;
    private readonly IHttpContextAccessor _httpContextAccessor;

    public MyNewContext(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
        GetUserGuid();
    }

    public void GetUserGuid()
    {
        _userGuid = _httpContextAccessor.HttpContext?.User?.FindFirst("unique_name")?.Value;
    }
}

启动.cs

services.AddHttpContextAccessor();
services.AddDbContext<MyNewContext>(x => x.UseSqlServer(Configuration["ConnectionStrings:xyz"]));

我究竟做错了什么? 还有其他获取用户信息的方法吗?

谢谢你。

在我的 startup.cs 中,我有 AddJwtBearer 功能。

在那里,我现在只需将 guidClaim 值传递给 MyNewContext 中的 SetGuid function。 不需要 IHttpContextAccessor。

Claim guidClaim = (context.Principal.Identity as ClaimsIdentity).FindFirst("unique_name");

MyNewContext.SetGuid(guidClaim.Value);

这对我有用 - 现在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM