【问题标题】:swagger REST API patch request to change one field of modelswagger REST API 补丁请求更改模型的一个字段
【发布时间】:2021-02-11 15:00:50
【问题描述】:

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

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 中的 balance 字段并能够使用补丁更改更新数据库。

仅处理余额更新的最佳方式是什么,它是一个 PATCH 请求吗?如果是,它将如何实现?

【问题讨论】:

    标签: c# rest http-headers


    【解决方案1】:

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

    您应该为天平创建一个 DTO。基本上,您创建了一个名为“CardBalanceDto”的类,它将仅包含您需要从 Card 模型中获得的字段(在本例中仅包含 balance 属性)。然后,在 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; }
    }
    

    【讨论】:

    • 感谢您的回复,我现在正在查看 DTO,但您能否提供一些关于如何将 CardBalanceDto 实施到补丁请求中的见解?因为我不确定如何“简单地接受 CardBalanceD 类型,然后只更改余额字段。”
    • 您是否正在使用 Visual Studio 构建 API 控制器?在任何情况下,您的补丁方法都会有一个 Card 类型的参数,只需将该参数更改为 CardBalanceDto。然后使用实体框架来改变平衡。
    • 感谢您的支持!是的,一直在 VS 中搭建控制器,现在按预期完美运行。
    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 2018-11-24
    • 2022-01-10
    • 2021-05-10
    • 2017-07-10
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多