MediatR - 处理查询中的当前用户
MediatR - Handling current user in query
在查询中为当前用户建模的最佳方式是什么?我正在创建一个剃刀页面应用程序。当我执行查询和命令时,我需要能够附加当前用户。有推荐的方法吗?
下面的方法对我很有效,因为我让用户进入了我的 Razor 项目所依赖的服务层。
按照 David Fowler here 的指导,我创建了一个 UserAccessor
class 如下:
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;
}
我在启动时通过调用
在我的 Razor 项目中注册
services.AddTransient<IUserAccessor, UserAccessor>()
然后根据需要将其注入 MediatR 处理程序和我的 DbContext 以及一些工厂。
private readonly IUserAccessor _userAccessor;
public EventLogFactory(IUserAccessor userAccessor)
{
_userAccessor = userAccessor ?? throw new ArgumentNullException(nameof(userAccessor));
}
UserAccessor
中引用的 IHttpContextAccessor
在未引用 [= 的项目中需要 Microsoft.AspNetCore.Http.Abstractions nuget 36=] 元包,并且还要求您的 Razor 项目在启动时也实现 AddHttpContextAccessor()
:
// Register IHttpContextAccessor for services to get access to the HttpContext.
services.AddHttpContextAccessor();
希望这对您有所帮助。
在查询中为当前用户建模的最佳方式是什么?我正在创建一个剃刀页面应用程序。当我执行查询和命令时,我需要能够附加当前用户。有推荐的方法吗?
下面的方法对我很有效,因为我让用户进入了我的 Razor 项目所依赖的服务层。
按照 David Fowler here 的指导,我创建了一个 UserAccessor
class 如下:
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;
}
我在启动时通过调用
在我的 Razor 项目中注册services.AddTransient<IUserAccessor, UserAccessor>()
然后根据需要将其注入 MediatR 处理程序和我的 DbContext 以及一些工厂。
private readonly IUserAccessor _userAccessor;
public EventLogFactory(IUserAccessor userAccessor)
{
_userAccessor = userAccessor ?? throw new ArgumentNullException(nameof(userAccessor));
}
UserAccessor
中引用的 IHttpContextAccessor
在未引用 [= 的项目中需要 Microsoft.AspNetCore.Http.Abstractions nuget 36=] 元包,并且还要求您的 Razor 项目在启动时也实现 AddHttpContextAccessor()
:
// Register IHttpContextAccessor for services to get access to the HttpContext.
services.AddHttpContextAccessor();
希望这对您有所帮助。