Asp.net Core模型联编程序接受布尔类型的随机整数

时间:2019-05-14 14:32:19

标签: asp.net-core asp.net-core-webapi model-binding

鉴于模型具有布尔属性:

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)?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

也许这不是一个完美的解决方案,但是一旦您将JSON作为请求正文发送出去,这种解决方法便会满足您的需求:

click

如果'true'和'1'的变化形式,则返回'true',否则将为'false'