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

时间:2020-06-05 06:58:25

标签: c# .net

我从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都知道ProductIdAmount。数组中的此实例都需要两个字段。

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,因为该数组包含一个没有ProductIdAmount字段的对象。但是,它采用整数的默认值0代替了错误。我如何也可以验证OrderPosition数组中的每个OrderPositions

1 个答案:

答案 0 :(得分:1)

您还需要在Range上使用ProductId。如果您的ProductId从1开始,则如下所示:

[Required]
[Range(1, int.MaxValue)]
public int ProductId { get; set; }