需要从存储库层访问已登录的用户

时间:2019-01-28 06:14:04

标签: c# asp.net-core asp.net-core-mvc

当我在.net核心中使用依赖项命令时,如何将声明当前用户对象传递到存储库层,可能是应用(使用 .Net核心的N层)体系结构

  1. UI
  2. API
  3. 模型
  4. 存储库
  5. 普通
  6. 数据库

    在上面的API中,项目与Model,Repository和Common具有依赖关系。

我的问题是要求用户(使用JWT中间件)需要注入存储库层,以便created_by和modified_by不能成为API层代码中的参数

1 个答案:

答案 0 :(得分:2)

您可以使用loggedInUserId通过以下方式在Repository Layer中获得IHttpContextAccessor

public class Repository
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public Repository(IHttpContextAccessor httpContextAccessor)
    {
       _httpContextAccessor = httpContextAccessor;
    }

   public void YourRepositoryMethod()
   {
      var userId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
      // or
      var userId = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
   }
}

然后,您应该在IHttpContextAccessor类中注册Startup,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

    // Or you can also register as follows

    services.AddHttpContextAccessor();
}