【问题标题】:How to validate CQRS query如何验证 CQRS 查询
【发布时间】:2021-07-19 15:38:30
【问题描述】:

我正在开发一个 APS.NET Core MVC Web 应用程序,我有两个问题。

  1. 如何在执行之前验证(使用 FluentValidation)CQRS 查询?
  2. ​如何在 FluentValidation 失败时将用户重定向到错误页面(例如 404 页面)?

第一个问题描述

在没有 CQRS 的情况下,我使用以下方法通过 ID 获取标签,如果未找到标签,则返回未找到结果:

public async Task<IActionResult> Edit(int id)
{
    var tag = await _unitOfWork.Tags.GetAsync(id);
    if (tag is null)
        return NotFound();

    return View(tag);
}

对于 CQRS,我使用以下代码:

// CQRS Query
public class GetTagByIdQuery : IRequest<Tag>
{
    public int Id { get; set; }

    public class GetTagByIdQueryHandler : IRequestHandler<GetTagByIdQuery, Tag>
    {
        private readonly IUnitOfWork _unitOfWork;

        public GetTagByIdQueryHandler(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }

        public async Task<Tag> Handle(GetTagByIdQuery request, CancellationToken cancellationToken)
        {
            return await _unitOfWork.Tags.GetAsync(request.Id);
        }
    }
}


// Action method
public async Task<IActionResult> Edit(int id)
{
    return View(await _mediator.Send(new GetTagByIdQuery { Id = id }));
}

如何确保给定的 ID 有效?

第二个问题描述

例如:

如果用户请求标签 ID 无效的标签:

https://localhost:44343/admin/tags/edit/80

我想将用户重定向到 404 错误页面。

【问题讨论】:

    标签: asp.net-mvc asp.net-core-3.1 cqrs mediator


    【解决方案1】:

    对于这两个问题,当标签ID无效时,查询结果为空,我们可以这样处理:

    public async Task<IActionResult> Edit(int id)
    {
        var query = new GetTagByIdQuery { Id = id };
        var result = await _mediator.Send(query);
    
        return result is not null ? View(result) : (IActionResult)NotFound();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2014-10-21
      • 2011-01-02
      • 1970-01-01
      • 2010-12-08
      • 2019-12-10
      相关资源
      最近更新 更多