如何将 json 对象数组发布到 Web api

Posted

技术标签:

【中文标题】如何将 json 对象数组发布到 Web api【英文标题】:how to post json object array to a web api 【发布时间】:2015-03-22 07:30:55 【问题描述】:

如何将 JSON 数组发布到 Web API?它适用于单个对象。

这是我尝试过的,但控制器似乎返回 0 而不是预期的 3

这是我的 JSON:

var sc = [
              "ID": "5",
              "Patient_ID": "271655b8-c64d-4061-86fc-0d990935316a",
              "Table_ID": "Allergy_Trns",
              "Checksum": "-475090533",
              "LastModified": "2015-01-22T20:08:52.013"
          ,
          
              "ID": "5",
              "Patient_ID": "271655b8-c64d-4061-86fc-0d990935316a",
              "Table_ID": "Allergy_Trns",
              "Checksum": "-475090533",
              "LastModified": "2015-01-22T20:08:52.013"
          ,
          
              "ID": "5",
              "Patient_ID": "271655b8-c64d-4061-86fc-0d990935316a",
              "Table_ID": "Allergy_Trns",
              "Checksum": "-475090533",
              "LastModified": "2015-01-22T20:08:52.013"
          ];           

AJAX 调用:

$.ajax(
           url: urlString,
           type: 'POST',
           data: sc,
           dataType: 'json',
           crossDomain: true,
           cache: false,
           success: function (data)  console.log(data); 
        );

Web API 控制器:

[HttpPost]
public string PostProducts([FromBody]List<SyncingControl> persons)

    return persons.Count.ToString(); // 0, expected 3

【问题讨论】:

我不认为是这样,但是您是否尝试过在浏览器中使用开发工具来确认是否正在发送有效负载?我对Web API一无所知,所以这可能不是最可能的原因,但我可以想象在请求被触发之前客户端设置sc等于null,这似乎可以做到这一点。 浏览器控制台有错误吗?您在 sc 中的第一人称对象中缺少双引号。 控制台没有任何错误 【参考方案1】:

json中有错误Table_ID": "Allergy_Trns"应该是"Table_ID": "Allergy_Trns"

缺少双引号。

更新

您需要确保以 json 格式发送参数,如下所示:

 $.ajax(
        url: urlString,
        type: 'POST',
        data: JSON.stringify(sc),
        dataType: 'json',
        contentType: 'application/json',
        crossDomain: true,
        cache: false,
        success: function (data)  console.log(data); 
    );

注意JSON.stringify(sc),@herbi 关于指定内容类型也部分正确。

屏幕抓取

【讨论】:

hutchonoid:这里没有在我的代码中错过,对此感到抱歉。【参考方案2】:

您必须将 content-type 标头添加到 ajax 请求中,以便 WebAPI 能够理解请求并使用正确的格式化程序来反序列化数据:

$.ajax(
           url: urlString,
           type: 'POST',
           data: sc,
           dataType: 'json',
           contentType: "application/json",
           crossDomain: true,
           cache: false,
           success: function (data)  console.log(data); 
        );

【讨论】:

对不起,是“contentType”,不是“content-Type”【参考方案3】:

您可以在 beforeSend 上设置 Content-Type,这将确保您的 json 数据与您的服务器对象匹配

$.ajax(
        beforeSend: function (xhr) 
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        ,
           url: urlString,
           type: 'POST',
           data: sc,
           dataType: 'json',
           contentType: "application/json",
           crossDomain: true,
           cache: false,
           success: function (data)  console.log(data); 
        );

【讨论】:

以上是关于如何将 json 对象数组发布到 Web api的主要内容,如果未能解决你的问题,请参考以下文章

将数组json发送到控制器web api c#

如何将 JSON 返回反序列化为从 RestSharp 调用到 API 的对象数组?

如何使用 HttpClient 将 JSON 数据发布到 Web API

如何将带有嵌套数组的 JSON 对象映射到打字稿模型中?

Rails:如何将对象数组的哈希转换为 json

C# Web API:迭代数组并追加到 HTML 表