.NET Core [FromBody] 注释分配默认值而不是在缺少值时返回 400 错误

.NET Core [FromBody] annotation assigns default value instead of returning 400 error if value is missing

我创建了一个类似于

的控制器方法
[HttpPost]
public ActionResult<MyDTO> Post([FromBody] MyDTO myDTO)
{
    // do something with myDTO...
    Ok();
}

和 MyDTO:

namespace MyNamespace.DTO
{
    public class MyDTO
    {
        [Required]
        public int someNumber { get; set; }

        [Required]
        public bool someBool { get; set; }

        [Required]
        public DateTimeOffset someDate { get; set; }
    }
}

当我发送一个 post 和一个没有定义的 JSON 主体时,而不是 return 一个 400 或某种异常,它只是分配它们的默认(虚假)值。

当我定义另一个 DTO class 的列表时,它 return 一个 400 代码。

当没有提供某些必需的值而不是仅使用默认值时,如何使 API return 出错?

你必须手动控制它。没有别的办法了。

试试

[HttpPost]
public ActionResult<MyDTO> Post([FromBody] MyDTO myDTO)
{
    if(YourComprobation(myDto)){
       BadRequest();
    }
    Ok();
}

找到答案

我只需要让所有字段都可以为空,并且有一个

if (!ModelState.IsValid)
   // return 400

在控制器中。