【发布时间】:2019-10-01 15:01:31
【问题描述】:
假设模型具有布尔属性:
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 和 1 显然被视为布尔值。不过,我也很好奇如何防止 0 和 1 被强制转换为 bool 值。
-
@Skrface 我知道在传统的 web api / mvc 中,您必须编写自定义模型绑定器,以便从 int 转换为 bool,或从 string 转换为 bool。我真的不明白为什么随机数被认为是
true。看起来像是避免额外开销的技巧。
标签: asp.net-core asp.net-core-webapi model-binding