jQuery AJAX post数据在c#web api控制器中为null

我使用以下调用将数据发送到c# web api controller

 $.ajax({ type: "POST", url: "menuApi/menu/Cost", data: JSON.stringify(order), contentType: "application/json", success: function (data) { window.alert('done')}, dataType: 'json' }); 

服务器端的c# controller是这样的:

 public string Cost([FromBody] string order) { var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject(order); return ""; } 

Javascript中的订单对象是具有嵌套数组和属性的复杂对象。 我将数据作为null。 我不知道怎样才能通过ajax调用发送订单。

编辑:这是我的订单对象

 var order = { name:"", id:"", cost:"", details: { sItem:[{name:"",cost:""}], dItem:[{name:"",cost:"", components:[{name:"",quantity:""}]}] } } 

知道了,您需要将ajax请求作为带有空参数/表单字段名称的表单数据发布,如下所示:

  var order = { name: "", id: "", cost: "", details: { sItem: [{ name: "", cost: "" }], dItem: [{ name: "", cost: "", components: [{ name: "", quantity: "" }] }] } }; $.ajax({ type: "POST", url: "api/Values", data: {'': JSON.stringify(order)} , success: function (data) { window.alert('done') }, }); 

模型绑定器已经为您完成,无需反序列化。 您只需将参数类型更改为objectdynamic 。 左边是考虑删除冗余处理:

  public string Cost([FromBody] object order) { var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject(order.ToString()); return ""; }