2016-04-30 85 views
0

我有以下ASP.NET核心的控制器操作:模型绑定:在属性无效值使得模型空

public async Task<IActionResult> Post([FromBody]Model model) { } 

的模型如下:

public class Model { 
    public String Name { get; set; } 
    public Int32? Age { get; set; } 
} 

我的话,采用了棱角分明,试图张贴无效的模型:

model = { name: "John", age: "Ab } 

在我的控制器上模型变为null。如果我使用age: 30,则该模型具有定义的值。

如果年龄有无效的值,那么不应该定义模型,Age有Int32吗?默认值,例如null?

回答

1

这是预期的行为。 Int32? Age接受空值,但不是无效值。具有无效年龄值的发布模型尝试将该值转换为整数,并且由于该值不是整数而失败。

用下面的JSON:{ name: "John", age: "Ab }的ModelState中包含两个错误:

Unterminated string. Expected delimiter: \ 
Unexpected end when deserializing object 

给人一种正确的字符串值{ name: "John", age: "test"}的ModelState中包含一个错误:

Could not convert string to integer: test 
+0

是,同意但为什么制作模型空什么时候发生?为什么不只是该属性,并保持其他属性定义? –

+0

json无法转换为模型。只是因为json对模型无效。所以没有部分反序列化,它完全失败。 –