微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何验证 CQRS 查询

如何解决如何验证 CQRS 查询

我正在开发 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 错误页面

解决方法

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

public async Task<IActionResult> Edit(int id)
{
    var query = new GetTagByIdQuery { Id = id };
    var result = await _mediator.Send(query);

    return result is { } ? View(result) : (IActionResult)NotFound();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。