swagger REST API 补丁请求更改模型的一个字段

swagger REST API patch request to change one field of model

我正在休息 API 设置以下项目作为模型的一部分。它是一种处理公司员工付款方式的卡模型。 我正在尝试在卡控制器上创建一个补丁请求,在那里我可以只更新卡的余额。我有一个 put 方法,但不想每次都更新整个对象,我只想用补丁请求更新模型的余额字段。

public class Card
{
    [Key]
    public long CardNumber { get; set; }

    public decimal Balance { get; set; }

    public string PinNum { get; set; }

    public string CardId { get; set; }

    public long EmployeeId { get; set; }

}

put 方法适用于更新模型中的所有字段,但我只打算更新余额。我正在使用 swagger 端点来查看更改是否有效,并且在 PATCH 请求的 swagger 端点我希望它只显示 JSON 中的余额字段并能够使用补丁更改更新数据库。

仅更新​​余额的最佳方式是什么?它是 PATCH 请求吗?如果是,将如何实施?

您是否还需要卡号才能知道要更新哪些卡的余额?除非你使用我想的 ID 进行路由。

您应该为余额创建一个 DTO。基本上,您创建一个名为“CardBalanceDto”的 class,它将仅包含您需要的 Card 模型字段(在本例中仅包含余额 属性)。然后,在 PATCH 请求的 API 控制器方法上,只需接受 CardBalanceDto 类型,然后仅更改余额字段。

[HttpPatch("{id}")]
public async Task<IActionResult> PatchCard(long id, CardBalanceDto balanceDto)
{
    var card = new Card() { Id = id, Balance = balanceDto.Balance};
    _context.Cards.Attach(Card);
    _context.Entry(card).Property(x => x.Balance).IsModified = true;
    return Ok(await _context.SaveChangesAsync());
}

您的 DTO 看起来像这样:

public class CardBalanceDto {
    public decimal Balance { get; set; }
}