WebAPI参数null

时间:2016-04-14 16:24:50

标签: c# jquery json ajax asp.net-web-api

我创建了一个“Person”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。

我被告知这可能是“类型转换失败”但我似乎不太可能,因为即使获取对象然后将其保持不变,它仍然会失败。

我尝试过的事情:

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

1 个答案:

答案 0 :(得分:1)

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

添加一个不带参数的构造函数后,它就可以了!

public JSON_Person() { }