Web API通过jQuery POST发送多个对象

Web API通过jQuery POST发送多个对象,jquery,json,asp.net-web-api,Jquery,Json,Asp.net Web Api,我有一个接受检查模型的Web API控制器,即 public class Inspection { public int ID {get; set;} } 我已经在控制器上创建了一个POST方法。这很好,我已经用jQuery对其进行了测试 在我的javascript页面中,我创建了一个检查,即 var inspection = { ID: '123456' }; 然后像这样执行$.ajax: var p = $.ajax({ type: 'POST', url

我有一个接受检查模型的Web API控制器,即

public class Inspection
{
    public int ID {get; set;}
}
我已经在控制器上创建了一个POST方法。这很好,我已经用jQuery对其进行了测试

在我的javascript页面中,我创建了一个检查,即

var inspection = {
    ID: '123456'
};
然后像这样执行$.ajax:

var p = $.ajax({
    type: 'POST',
    url: 'http://...',
    cache: false,
    data: JSON.stringify(item),
    dataType: 'json',
    success: function(response) {
        //do stuff
    }
});

所以我的问题是:如果我有多个检查要发布,我如何将它们全部发送给控制器(一批或一批)?

Hm,根据您的服务器的期望,类似的操作可能会起作用:

var itemArr = [inspection0, inspection1, inspection2]; // etc...

var p = $.ajax({
    type: 'POST',
    url: 'http://...',
    cache: false,
    data: JSON.stringify(itemArr),
    dataType: 'json',
    success: function(response) {
        //do stuff
    }
}).fail(function(data) {
    // handle failure
});
或者,要分批发送,请执行以下操作:

var i = 0,
    max = itemArr.length;

for (; i < max; i++) {
    $.ajax({
        type: 'POST',
        url: 'http://...',
        cache: false,
        data: JSON.stringify(itemArr[i]),
        dataType: 'json',
        success: function(response) {
            //do stuff
        }
    }).fail(function(data) {
        // handle failure
    });
}
var i=0,
最大=项目长度;
对于(;i
另外,添加一个
.fail(…)
处理程序可能也是个好主意。

我过去曾在这种情况下使用过该插件

下面介绍如何使用它在一个AJAX调用中发送多个项目:

<script src="<%= Url.Content("~/Scripts/jquery-1.3.2.min.js") %>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/jquery.json-2.2.min.js") %>" type="text/javascript"></script>
<script type="text/javascript">
  function savePayment() {
    //Creating some test data
    var lineItems = new Object();
    lineItems.Entrys = new Array();
    lineItems.Entrys[0] = new Object({ Approved: "1.0", Deductible: "1.0", Coinsurance: "1.0", PaymentAmount: "1.0", VisitId: "1.0", VisitChargeId: "1.0" });
    lineItems.Entrys[1] = new Object({ Approved: "2.0", Deductible: "2.0", Coinsurance: "2.0", PaymentAmount: "2.0", VisitId: "2.0", VisitChargeId: "2.0" });


    //Posting them to server with ajax
    $.ajax({
      type: 'POST',
      contentType: 'application/json; charset=utf-8',
      url: '<%=Url.Action("SavePayment", "Home") %>',
      dataType: 'json',
      data: $.toJSON(lineItems),
      success: function(result) {
        if (result) {
          alert('Success');
        }
        else {
          alert('Failure');
        }
      }
    });
  }
</script>

函数savePayment(){
//创建一些测试数据
var lineItems=新对象();
lineItems.Entrys=新数组();
lineItems.Entrys[0]=新对象({批准:“1.0”,免赔额:“1.0”,共同保险:“1.0”,付款金额:“1.0”,VisitId:“1.0”,VisitChargeId:“1.0”});
lineItems.Entrys[1]=新对象({批准:“2.0”,免赔额:“2.0”,共同保险:“2.0”,付款金额:“2.0”,VisitId:“2.0”,VisitChargeId:“2.0”});
//使用ajax将它们发布到服务器
$.ajax({
键入:“POST”,
contentType:'application/json;charset=utf-8',
url:“”,
数据类型:“json”,
数据:$.toJSON(行项),
成功:功能(结果){
如果(结果){
警惕(“成功”);
}
否则{
警报(“故障”);
}
}
});
}

在一个调用中发布多个整数应该很容易。以下是一些需要快速检查的事项:

  • 在控制器中,方法签名是否类似于:

    public void Post([FromBody]int[] values) { // code here }
    
    请注意[FromBody]属性的使用

  • 在您的帖子中,内容类型标题是否设置为“content-type:application/json


  • 刚刚尝试了这个,控制器没有正确解释数据。@markp3rr我的更新有什么进展吗?(拆分为多个HTTP调用。)能否更改配置为“POST”动词的方法,以接受IEnumerable或List作为参数?@markp3rry我没有意识到这个问题与ASP.net有关。如果我的答案不适用,请告诉我。我已经按照你的建议做了很多。ajax请求到达了“成功”部分,但是web服务方法中的列表是空的。听起来是个好主意,我将在早上试一试。看起来您正在发回一个“经典”控制器,而不是一个Web API控制器-我是否正确?@markp3rry是的,这个示例不适用于Web API。我们的目标主要是向您展示如何将多个
    Inspection
    对象捆绑在一起,并使用
    jQuery.json
    将它们捆绑在一起,在一篇文章中发送它们。您可以发布API控制器及其操作方法吗?另外,您是否尝试过使用接受HttpRequestMessage然后解析请求内容的方法,而不是依赖于列表的模型绑定?我将给您一个upvote和接受的答案,因为我的部分问题是我没有按照您的建议设置内容类型。