ODataController 将 json 转换为数组

ODataController converting json to array

本文关键字:数组 转换 json ODataController      更新时间:2023-09-26

这是前面一个问题的延续

我有一个 OData 控制器,其操作为:

[HttpPost]
[ODataRoute("PostUpdate")]
public async Task<string> PostUpdate(HttpRequestMessage eventsToUpdate)
{
 //Do something
}

这就是我通过 ajax 调用调用控制器的方式:

var eventsToUpdate = [];
for(i=0;i<5;i++)
{
  //Build the data
  var updatedT = {
   "Id" : (Id)?Id:0,
   "Desc" : CalculatedDesc
   }
   eventsToUpdate.push(updatedT);
}
Url = "Api/Odata/PostUpdate"
$.ajax({
url :Url,
type:"POST",
data:eventsToUpdate ,
dataType : 'json',
success : function(result) {
}
});

问题是即使在将数组转换为 json 之后,数据在控制器的操作中也不可用。这就是我所做的

var eventsToUpdate = JSON.stringify(eventsToUpdate);

但如果我只是通过

var updatedT = {
   "Id" : (Id)?Id:0,
   "Desc" : CalculatedDesc
   }

我在行动中得到相同的数据.对此的解决方案是什么?

在我看来

,您的[HttpPost]期待一个名为 eventsToUpdate 的密钥,但它在发布的请求中找不到,因为它不存在,因为:

data:eventsToUpdate , // which is eq to = data:[{},{}...], 

最好发送一个对象,例如:

data:{eventsToUpdate:eventsToUpdate} ,
//----^^^^^^^^^^^^^^---------this key will be captured at backend
contentType:'application/json', //<------you would need to add this

另一个建议是在需要时使用traditional:true,

另外,async Task<string>如果返回类型是字符串,那么您也需要更改 ajax 的dataType,或者您应该从 WebMethod 返回 json。