我从API端点开始,根据客户ID为一个客户创建新订单
[HttpPost("{id:int}/orders")]
public async Task<ActionResult<object>> CreateCustomerOrderByIdAsync(CreateCustomerOrderByIdDto createCustomerOrderByIdDto)
{
// ...
}
因此DTO本身应验证整个请求。客户ID是必填字段,订单位置是可选的,订单本身可以为空。
public class CreateCustomerOrderByIdDto
{
[FromRoute]
[Required]
public int Id { get; set; }
[FromBody]
public OrderPosition[] OrderPositions { get; set; }
}
每个OrderPositions
都知道ProductId
和Amount
。数组中的此实例都需要两个字段。
public class OrderPosition
{
[Required]
public int ProductId { get; set; }
[Required]
[Range(1, int.MaxValue)]
public int Amount { get; set; }
}
当我使用以下json主体调用端点https://localhost:5001/customers/1/orders时
{
"orderPositions": [{}]
}
我期望400,因为该数组包含一个没有ProductId
或Amount
字段的对象。但是,它采用整数的默认值0
代替了错误。我如何也可以验证OrderPosition
数组中的每个OrderPositions
?
答案 0 :(得分:1)
您还需要在Range
上使用ProductId
。如果您的ProductId从1开始,则如下所示:
[Required]
[Range(1, int.MaxValue)]
public int ProductId { get; set; }