c# - FromRoute 不在单独的 DTO 类中设置 Url 参数
问题描述
在创建一个新的 Web API 项目时,您可能会想出需要 url 参数、正文值和查询的控制器端点,尤其是对于 PATCH 路由。
因此,让我们假设您想通过更改产品的数量来更新您的购物篮。端点需要来自 url 的订单 ID 和产品 ID 以及来自正文的金额。
[HttpPatch("{orderId}/products/{productId}")]
public async Task<IActionResult> Update(Dto dto)
{
return Ok(dto);
}
匹配Dto
应该保存整个请求中的值
public class Dto
{
[FromRoute]
public int OrderId { get; set; }
[FromRoute]
public int ProductId { get; set; }
[FromBody]
public int Amount { get; set; }
}
通过 PATCH https://localhost:5001/orders/123/products/456 Amount
调用 API 时是正确的,但两个 ID 参数都是 0。我认为它们不会被设置并且将具有它们的默认值。
我错过了什么吗?
解决方案
我有同样的问题。这对我有帮助。
在控制器中,您需要指定 [FromRoute]:
[HttpPatch("{orderId}/products/{productId}")]
public async Task<IActionResult> Update([FromRoute] Dto dto)
{
return Ok(dto);
}
在 DTO 中,在应该从 body 中获取的字段上,需要指定 [FromBody]:
public class Dto
{
public int OrderId { get; set; }
public int ProductId { get; set; }
[FromBody]
public int Amount { get; set; }
}
推荐阅读
- python - Julia:龙格库塔法的计算时间
- python - 在 python 中显示 SyntaxError
- ios - 当两个用户之间正在进行来电并收到另一个来电时,应自动拒绝另一个来电
- ansible - 为什么 Ansible 变量覆盖策略的行为似乎不像记录的那样?
- java -
实现 'com.chaos.view:pinview:1.4.4' 当我尝试在我的布局上调用它时它什么也不显示
<com.chaos.view.PinView android:layout_width="wrap_content"
- c# - 如何更改所选行中列的可见性?
- python - 如何从给定列表中创建具有特定标题的数据框列表
- excel - 如何在 For Next 中应用 Step -1 以相反的顺序循环?
- python - TypeError: 'numpy.int64' object is not iterable - 所有值都是浮点数,但我仍然收到错误消息。我该如何解决这个问题?
- swift - 为什么我在不同的项目(Swift)中得到两个不同的屏幕尺寸?