C# 如何为嵌套对象创建dto验证

C# 如何为嵌套对象创建dto验证,c#,.net,C#,.net,我从一个API端点开始,通过客户id为一个客户创建新订单 [HttpPost("{id:int}/orders")] public async Task<ActionResult<object>> CreateCustomerOrderByIdAsync(CreateCustomerOrderByIdDto createCustomerOrderByIdDto) { // ... } 每个OrderPositions都知道ProductId和金额。数组中的此实例

我从一个API端点开始,通过客户id为一个客户创建新订单

[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; }