C# 将多个JSON记录发送到.NET控制器

C# 将多个JSON记录发送到.NET控制器,c#,jquery,asp.net,json,asp.net-core,C#,Jquery,Asp.net,Json,Asp.net Core,我构建了一个解决方案,使用jQueryAjax将一条JSON记录发送到我的.NET控制器,效果非常好,如下所示 $.ajax({ data: JSON.stringify({'prodId': 1041, 'sizeId': "XS", 'pdtWeight': 2.3}), contentType: "application/json; charset=utf-8", type: 'POST', url: '@Url.Action(&qu

我构建了一个解决方案,使用jQueryAjax将一条JSON记录发送到我的.NET控制器,效果非常好,如下所示

$.ajax({
  data: JSON.stringify({'prodId': 1041, 'sizeId': "XS", 'pdtWeight': 2.3}),
  contentType: "application/json; charset=utf-8",
  type: 'POST',
  url: '@Url.Action("AdjustWeight", "ProductBins")',
  success: function (data) {
    //do something great here
  }
});
以下是控制器“ProductBins”中的代码:“AdjustWeight”

这是请求类代码

public class AdjustWeightRequest
{
  public int ProdId { get; set; }
  public string SizeId { get; set; }
  public decimal PdtWeight { get; set; }
}
上面所有的代码都非常有效。这正是我需要它做的。但是,我可能需要向控制器发送1个或多个JSON记录。在上面的例子中,我只发送了1条JSON记录,效果很好。出于测试目的,我在JavaScript函数中硬编码了以下内容,该函数将发送2条JSON记录

$.ajax({
  data: JSON.stringify([{'prodId': 1041, 'sizeId': "XS", 'pdtWeight': 2.3}, {'prodId': 1041, 'sizeId': "S", 'pdtWeight': 3.2}]),
  contentType: "application/json; charset=utf-8",
  type: 'POST',
  url: '@Url.Action("AdjustWeight", "ProductBins")',
  success: function (data) {
    //do something great here
  }
});
请注意添加了方括号以及每个记录(sizeId和pdtWeight)中的细微差异。因此,我假设我需要在控制器中执行一些foreach循环来处理每个JSON记录(1个或更多),并相应地更新数据库。但是,在我到达那里之前,我从控制器那里得到了一个Javascript 400错误请求错误,因此我试图在控制器类或请求类中放置断点并进行调试的尝试无效。添加方括号似乎不起作用,因为当我用方括号对我的工作代码(单个记录)进行简单调整时,我得到了相同的400错误请求错误

仅供参考,我正在为测试目的硬编码JSON,并在本文中解释这一点。最终的解决方案将构建一个JavaScript数组并将其传递给JSON.stringify,后者将自动添加方括号。希望这是足够的信息,可以提供一些见解

解决了@AussieJoe解决方案非常有效。这是更新后的控制器代码

public JsonResult AdjustWeight(AdjustWeightRequest[] adjustWeightRequest)
{
  foreach (var item2 in adjustWeightRequest)
  {
    var AdjWt = (
      from pr in applicationDbContext.Products
      join pc in applicationDbContext.Prodcolors on pr.ProdId equals pc.ProdId
      join pd in applicationDbContext.Proddetails on pc.PclId equals pd.PclId
      where pr.ProdId == item2.ProdId && pd.PdtSize == item2.SizeId
      select pd.PdtId
    ).ToList();

    var prodDetailsToUpdate = applicationDbContext.Proddetails.Where(i => AdjWt.Contains(i.PdtId));

    foreach (var item in prodDetailsToUpdate)
    {
      item.PdtWeight = item2.PdtWeight;
    }
    applicationDbContext.SaveChanges();
  }
  return Json(true);
}

控制器设置为一次只允许一个对象…但在第二个示例中,您试图在
stringify
调用时传入一个数组

将API控制器的方法签名更改为:

public JsonResult AdjustWeight(AdjustWeightRequest[] adjustWeightRequest)

这将允许一个对象数组,而不是单个对象。

您是否尝试过公共JsonResult AdjustWeight(List adjustWeightRequest)?太棒了!!真是太棒了!非常感谢你。。。
public JsonResult AdjustWeight(AdjustWeightRequest[] adjustWeightRequest)