2016-04-30 100 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對模型無效。所以沒有部分反序列化,它完全失敗。 –