C# MediatR-处理查询中的当前用户

C# MediatR-处理查询中的当前用户,c#,mediatr,asp.net-core-2.2,C#,Mediatr,Asp.net Core 2.2,在查询中对当前用户建模的最佳方法是什么?我正在创建一个razor页面应用程序。我需要能够在执行查询和命令时附加当前用户。有没有推荐的方法可以做到这一点?下面的方法对我来说很好,因为我有能力让用户进入我的Razor项目所依赖的服务层 根据David Fowler的指导,我创建了一个UserAccessor类,如下所示: public class UserAccessor : IUserAccessor { private readonly IHttpContextAccessor _acc

在查询中对当前用户建模的最佳方法是什么?我正在创建一个razor页面应用程序。我需要能够在执行查询和命令时附加当前用户。有没有推荐的方法可以做到这一点?

下面的方法对我来说很好,因为我有能力让用户进入我的Razor项目所依赖的服务层

根据David Fowler的指导,我创建了一个
UserAccessor
类,如下所示:

public class UserAccessor : IUserAccessor
{
    private readonly IHttpContextAccessor _accessor;

    public UserAccessor(IHttpContextAccessor accessor)
    {
        _accessor = accessor ?? throw new ArgumentNullException(nameof(accessor));
    }

    public ClaimsPrincipal User => _accessor.HttpContext.User;
}
我在启动时通过调用

services.AddTransient<IUserAccessor, UserAccessor>()
UserAccessor
中引用的
IHttpContextAccessor
在不引用Microsoft.AspNetCore.App元包的项目中需要Microsoft.AspNetCore.Http.Abstracts nuget,并且还需要Razor项目在启动时实现
AddHttpContextAccessor()

// Register IHttpContextAccessor for services to get access to the HttpContext.  
services.AddHttpContextAccessor();

希望这有帮助。

您可能可以为所有事件和命令创建一个具有userId属性的抽象类,在其中包含
IHttpContextAccessor
,并分配userId。您的问题没有任何示例代码或上下文,因此我们无法提供太多帮助。出于兴趣,
IUserAccessor
是否也可以注册为
Scoped
,而不是
Transient
,因为它在请求的生命周期内是相同的用户数据?
// Register IHttpContextAccessor for services to get access to the HttpContext.  
services.AddHttpContextAccessor();