我从一个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
。如何也验证OrderPositions
数组中的每个OrderPosition
?
发布于 2020-06-05 15:06:40
您还需要在ProductId
上使用Range
。如果您的ProductId从1开始,则如下所示:
[Required]
[Range(1, int.MaxValue)]
public int ProductId { get; set; }
https://stackoverflow.com/questions/62209792
复制相似问题