【发布时间】:2019-11-15 05:41:22
【问题描述】:
我一直在使用 MediatR Pipelines 来做以下事情(以相同的顺序)
- 添加当前登录用户的声明。
- 根据声明集授权用户。
- 验证输入模型
- 性能跟踪管道行为。
对于步骤 1 和 2。我的 MediatR 对象继承自一个名为 Request 的类,如下所示。
public class Request
{
/// <summary>
/// Gets or sets the current login user.
/// </summary>
[JsonIgnore]
public ClaimsPrincipal User { get; set; }
}
这是一个示例 MediatR 查询对象。
public class GetById : Request, IRequest<CompanyViewModel>
{
/// <summary>
/// Gets or sets the Company Id.
/// </summary>
public int CompanyId { get; set; }
}
这是我在 1) 中注入 IHttpContextAccessor 并获取声明的管道行为。
public class AttachContextUserPipelineBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
where TRequest : Request
这是 2) 我授权用户的管道行为。
public class AuthorizationPipelineBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
where TRequest : Request
到目前为止这还不错,但我现在有几个不需要授权的查询/命令对象(有点允许匿名)。但是在这个方案中,我必须从 Request 继承 Query/Command 类,并且还定义了一个授权管道处理程序。否则,会引发异常。
我怎样才能拥有这种方案,只是跳过/跳转授权管道并直接触发 MediatR 命令,以便调用它的处理程序并跳过其间的授权处理程序?
【问题讨论】:
标签: c# asp.net-core mediatr