C# 如何为嵌套对象创建dto验证
我从一个API端点开始,通过客户id为一个客户创建新订单C# 如何为嵌套对象创建dto验证,c#,.net,C#,.net,我从一个API端点开始,通过客户id为一个客户创建新订单 [HttpPost("{id:int}/orders")] public async Task<ActionResult<object>> CreateCustomerOrderByIdAsync(CreateCustomerOrderByIdDto createCustomerOrderByIdDto) { // ... } 每个OrderPositions都知道ProductId和金额。数组中的此实例
[HttpPost("{id:int}/orders")]
public async Task<ActionResult<object>> CreateCustomerOrderByIdAsync(CreateCustomerOrderByIdDto createCustomerOrderByIdDto)
{
// ...
}
每个OrderPositions
都知道ProductId
和金额。数组中的此实例需要这两个字段
public class OrderPosition
{
[Required]
public int ProductId { get; set; }
[Required]
[Range(1, int.MaxValue)]
public int Amount { get; set; }
}
当我使用以下json主体调用端点时
{
"orderPositions": [{}]
}
我希望是400,因为数组包含一个没有ProductId
或Amount
字段的对象。但是它采用整数的默认值,即0
,而不是错误。如何验证OrderPositions
数组中的每个OrderPosition
呢?您还需要在ProductId
上使用Range
。如果您的ProductId从1开始,则它将如下所示:
[Required]
[Range(1, int.MaxValue)]
public int ProductId { get; set; }
您需要将intproductid
更改为可为空的int,如int?ProductId
如前所述,感谢您的回复。因此,正确的修复方法是公共类OrderPosition{[Required][Range(1,int.MaxValue)]public int ProductId{get;set;}[Required][Range(1,int.MaxValue)]public int Amount{get;set;}
?因为从0开始的范围只接受整数的默认值?[必需]
似乎是多余的,因为范围
属性似乎可以处理它。但是,如果您只想验证设置为的可选字段,该怎么办?当前,范围
属性会将该字段标记为requiredRight,您可以删除Required,并且可以将金额范围保持在0,除非1是您期望的最小金额
[Required]
[Range(1, int.MaxValue)]
public int ProductId { get; set; }