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

Pal*_*mar 3 c# asp.net-core-mvc asp.net-core

如何将声明当前用户对象传递到存储库层,而我在 .net 核心中使用依赖指令可能应用程序(使用.Net 核心的N 层)架构可能是

  1. 用户界面

  2. 应用程序接口

  3. 模型

  4. 存储库

  5. 常见的

  6. 数据库

    在上面的 API 中,有 Model、Repository 和 Common 的项目依赖。

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

Tan*_*jel 7

你可以得到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);
   }
}
Run Code Online (Sandbox Code Playgroud)

然后你应该IHttpContextAccessorStartup课堂上注册如下:

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

    // Or you can also register as follows

    services.AddHttpContextAccessor();
}
Run Code Online (Sandbox Code Playgroud)