给定模型具有布尔属性:

public class Person
{
    public string Name { get; set; }
    public bool IsMale { get; set; }
}


尝试发布以下有效负载时:

{
    "name": "Bob",
    "isMale": 12345 // any random integer
}


一个简单的动作:

[HttpPost]
public IActionResult Post([FromBody] Person person)
{
    if (ModelState.IsValid)
        return Ok();
    return BadRequest(ModelState);
}


person.IsMale属性获取true的值。

如果通过isMale: "foobar",我将收到无效的类型错误

如果通过isMale: "0",我将收到无效的类型错误

如果通过isMale: "1",我将收到无效的类型错误

如果通过isMale: "True"我得到true

如果通过isMale: "False"我得到false

如果通过isMale: 0我得到false

如果通过isMale: 1我得到true

如果传递isMale: 34(随机整数),我得到true

题:

为什么它认为随机整数默认为true,以及如何更改该行为以抱怨传入的类型不合适(int而不是bool)?

最佳答案

从您的示例来看,任何不是0的数值都将解释为true,这一点都不奇怪。

带引号的版本"0""1"string类型,不能直接解析为bool

请参阅bool.Parse(string)的文档。

10-06 13:27