我已經創建了一個「Person」ADO.Net實體模型,並從中「搭建」了一個Web API控制器。實體模型是嵌套的,其中包含其他對象的數組。WebAPI參數null
因爲這些嵌套對象包含一個引用它們父對象的屬性,所以它們不可序列化。所以我創建了一個「JSON_Person」類,我可以將Person對象及其嵌套屬性複製到(減去嵌套對象對其父項的引用),以便可以使用GET方法檢索它們。
直到這一點,一切都按預期工作。我可以對API執行GET請求並獲取一組JSON對象,每個JSON對象都有自己的嵌套對象數組。我也可以對API執行PUT請求並更新記錄。
即使PUT方法接受一個「人」的對象,而不是一個「JSON_Person」,它的工作原理是因爲(我認爲)的JSON_Person和人的屬性匹配1比1
但是,更改參數後從Person類型到JSON_Person,API中的參數現在總是顯示爲空。
我被告知這可能是一個「類型轉換失敗」,但它似乎不太可能,因爲即使GET對象,然後把它回到原來的不變,它仍然失敗。
事情我已經嘗試:
- 添加[FromBody]將API參數。
- 在jQuery.ajax調用中更改「contentType:'application/json; charset = utf-8'」。
- 在發送到測試類型轉換之前,將所有屬性設置爲空。
AJAX調用
$.ajax({
type: "PUT",
url: "/api/person/" + selected.Id,
data: JSON.stringify(selected),
contentType: 'application/json; charset=utf-8',
success: function() {},
error: function() {
return alert("error");
}
});
put方法
[ResponseType(typeof(void))]
public IHttpActionResult PutPerson(int id, JSON_Person json_Person)
{
// Convert JSON_Person back to Person and do other stuffs...
}
您是否檢查過'ModelState.Errors'屬性? –
我沒有看到ModelState的錯誤屬性。 – Austneal