在存储库服务中检索用户 http 数据

Tac*_*yon 5 c# repository asp.net-core

我目前正在构建一个应用程序,其中每个用户都有一个存储在用户会话存储中的唯一密钥。此密钥用于解密数据库中的用户数据。由于应用程序的存储库层处理数据库查询(使用 Dapper),我希望在那里进行解密。

现在的问题是:我可以从会话存储中检索用户密钥,将其传递给控制器​​,然后传递给服务,然后在链接的每个方法中使用名称为“key”的参数传递给存储库。有没有办法将密钥从控制器传递到存储库层,而不必在每次调用中手动包含密钥?

如果有比将它存储在会话存储中更好的解决方案,我愿意接受它,如果它能让这更容易。

我遵循的加密系统如下(来自另一个 SO 答案): 加密机制

Arm*_*our 5

您可以注入IHttpContextAccessor您的存储库或其他相关业务服务来检索用户密钥。

假设您将HeaderHttp 请求的用户密钥发送为UserKey

在你的 Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddHttpContextAccessor();
    ...
}
Run Code Online (Sandbox Code Playgroud)

在您的存储库中:

public Repository(IHttpContextAccessor httpContextAccessor, ...)
{
    ...
    var userKey = httpContextAccessor.HttpContext.Request.Headers["UserKey"].FirstOrDefault();

    // Or if you send it as cookie: 
    // var userKey = httpContextAccessor.HttpContext.Request.Cookies["UserKey"];
    ...
}
Run Code Online (Sandbox Code Playgroud)