我已经创建了一个“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