MediatR 的 Unit.Value 返回状态代码 200 而不是 204

发布于 2025-01-11 04:48:36 字数 1040 浏览 0 评论 0原文

考虑以下代码,

public async Task<Unit> Handle(UpdateVendorCommand request, CancellationToken cancellationToken)
    {
        var vendor = await _context.Vendor.FindAsync(request.Id);

        if (vendor is null)
            throw new KeyNotFoundException();

        _mapper.Map(request, vendor);
        await _context.SaveChangesAsync();
        return Unit.Value;
    }  

我收到状态代码 200 而不是 204,因为我无法返回 null。如果我的方法返回类型为 Task,如何返回 null?或者除了使用 Task 之外还有其他选择吗?

我的控制器

public class UpdateVendorController : ControllerBase
{
    private readonly IMediator _mediator;

    public UpdateVendorController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpPut]
    [Route("vendor")]
    [SwaggerOperation(Tags = new[] { "Vendor" })]
    public async Task<Unit> UpdateVendor([FromBody] UpdateVendorCommand request)
    {
        return await _mediator.Send(request);
    }
}

consider following code

public async Task<Unit> Handle(UpdateVendorCommand request, CancellationToken cancellationToken)
    {
        var vendor = await _context.Vendor.FindAsync(request.Id);

        if (vendor is null)
            throw new KeyNotFoundException();

        _mapper.Map(request, vendor);
        await _context.SaveChangesAsync();
        return Unit.Value;
    }  

I'm getting status code 200 instead of 204 because I can't return null. How do I return null if my method return type is Task<Unit>? Or is there any alternative beside using Task<Unit>?

My Controller

public class UpdateVendorController : ControllerBase
{
    private readonly IMediator _mediator;

    public UpdateVendorController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpPut]
    [Route("vendor")]
    [SwaggerOperation(Tags = new[] { "Vendor" })]
    public async Task<Unit> UpdateVendor([FromBody] UpdateVendorCommand request)
    {
        return await _mediator.Send(request);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月苍老的讽刺 2025-01-18 04:48:36

对于 Mediatr 来说,Unit 相当于 void,而不是任何类型的可以为 null 的对象。

我建议您将控制器更改为更具体的返回类型:

public async Task<IActionResult> UpdateVendor([FromBody] UpdateVendorCommand request)
{
    _ = await _mediator.Send(request); // Don't care about the return type, it's void
    return NoContent();
}

For Mediatr, Unit is equivalent to void, not any kind of object that can be nullable.

I'd suggest you change the controller to be more specific in return types:

public async Task<IActionResult> UpdateVendor([FromBody] UpdateVendorCommand request)
{
    _ = await _mediator.Send(request); // Don't care about the return type, it's void
    return NoContent();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文