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

问题描述 投票:0回答:1

我设置了一个 REST 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 请求吗?如果是,将如何实施?

c# rest http-headers
1个回答
2
投票

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

您应该为余额创建一个 DTO。基本上,您创建一个名为“CardBalanceDto”的类,该类仅包含卡模型中所需的字段(在本例中仅包含余额属性)。然后,在 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; }
}
© www.soinside.com 2019 - 2024. All rights reserved.