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; }
}
我正在休息 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; }
}