【发布时间】:2016-04-14 16:24:50
【问题描述】:
我创建了一个“人”ADO.Net 实体模型,并从中“搭建”了一个 Web API 控制器。实体模型是嵌套的,其中包含其他对象的数组。
因为这些嵌套对象包含引用其父对象的属性,所以它们不可序列化。因此,我创建了一个“JSON_Person”类,我可以将 Person 对象及其嵌套属性复制到其中(减去嵌套对象对其父对象的引用),以便可以使用 GET 方法检索它们。
到目前为止,一切都按预期进行。我可以向 API 发出 GET 请求并获取 JSON 对象数组,每个对象都有自己的嵌套对象数组。我还可以向 API 发出 PUT 请求并更新记录。
即使 PUT 方法接受“Person”对象而不是“JSON_Person”,它仍然有效,因为(我假设)JSON_Person 和 Person 的属性是 1 比 1 匹配的。
但是,将参数类型从 Person 更改为 JSON_Person 后,API 中的参数现在始终显示为 null。
有人告诉我,这可能是“类型转换失败”,但对我来说似乎不太可能,因为即使 GET 对象然后将其原封不动地放回去,它仍然会失败。
我尝试过的事情:
- 将 [FromBody] 添加到 API 参数。
- 在 jQuery.ajax 调用中更改“contentType: 'application/json; charset=utf-8'”。
- 在发送到测试类型转换之前将所有属性设置为 null。
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");
}
});
放置方法
[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 的 Errors 属性。
标签: c# jquery json ajax asp.net-web-api