【问题标题】:WebAPI Parameter nullWebAPI 参数 null
【发布时间】: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 对象然后将其原封不动地放回去,它仍然会失败。

我尝试过的事情:

  1. 将 [FromBody] 添加到 API 参数。
  2. 在 jQuery.ajax 调用中更改“contentType: 'application/json; charset=utf-8'”。
  3. 在发送到测试类型转换之前将所有属性设置为 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


【解决方案1】:

事实证明,PUT 方法根本没有问题。我创建了一个部分类 Person 来向接受 JSON_Person 的类添加一个构造函数(以帮助将 JSON_Person 转换回 Person),但没有空白构造函数。

添加一个不带参数的构造函数后,它工作了!

public JSON_Person() { }

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多