我设置了一个 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 请求吗?如果是,将如何实施?
您是否还需要卡号才能知道您要更新哪张卡的余额?除非你使用我认为的 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; }
}