如何将对象数组传递给webAPI列表

问题描述:

我有一个基本的HTML,它使用jquery ajax调用来调用WebAPI函数。 HTML发送一个对象数组,该对象应映射到我作为LIST接收的函数参数。如果我删除数组并只发送1个对象,并从函数中删除列表,那么我的代码工作,对象成功传递给参数。如何将对象数组传递给webAPI列表

JavaScript代码是如下

function Call_Service() { 
var input = 
{ 
    STATUS: "MY New Status", 
    CATEGORY: "My Value" 
}; 

var input2 = 
{ 
    STATUS: "MY New Status2", 
    CATEGORY: "My Value2" 
}; 

var input_array = new Array(); 
input_array[0] = input; 
input_array[1] = input2; 

$.ajax({ 
    type: "POST", 
    url: "http://localhost:34989/api/TMSPortal/objectPOC", 
    data: input_array, 
    success: function (response) { 
     alert(response); 
    } 
}); 
} 

C#的WebAPI是如下

 public Int64 objectPOC(List<TMS_STATUS> _Status) 
    { 

     Int64 retValu = 0; 

     for (int i = 0; i < _Status.Count; i++) 
     { 
      retValu++; 
     } 

     return retValu; 
    } 
+0

试着改变objectPOC方法参数TMS_STATUS [],而不是一个列表。 – 2013-02-25 16:23:59

+0

@KevinJunghans没有工作。 – nido 2013-02-25 17:39:11

当我开始知道Web-API当前不允许超过1个复杂参数,因此我通过以下解决方法完成了我的工作。让我知道是否有人有更好的解决方案:

更改Web-API函数以接收JObject,然后从中提取我的Complex对象。网络API函数看起来如下:

 public Int64 objectPOC(JObject jsonWrapper) 
    { 

     dynamic jsonValues = jsonWrapper; 
     JArray jsonInput = jsonValues.input; 
     JArray jsonInput2 = jsonValues.input2; 

     List<TMS_STATUS> _Status = jsonInput.ToObject<List<TMS_STATUS>>(); 
     List<TMS_STATUS> _Status2 = jsonInput2.ToObject<List<TMS_STATUS>>(); 


     Int64 retValu = 0; 

     for (int i = 0; i < _Status.Count; i++) 
     { 
      retValu++; 
     } 

     return retValu; 
    } 

Ajax调用如下:

function Call_Service() { 
var input = 
{ 
    STATUS: "MY New Status", 
    CATEGORY: "My Value" 
}; 

var input2 = 
{ 
    STATUS: "MY New Status2", 
    CATEGORY: "My Value2" 
}; 

var input_array = new Array(); 
input_array[0] = input; 
input_array[1] = input2; 

alert(input_array[0].STATUS); 

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "http://localhost:34989/api/TMSPortal/objectPOC", 
    dataType: "json", 
    data: JSON.stringify({ 
     input: input_array, 
     input2: input_array 
    }), 
    success: function (response) { 
     alert(response); 
    } 
}); 
} 

要发送多个复杂类型参数,创建一个模型,并暴露出它们作为模型内部的性质。在Web API中,开箱即可只有1个复杂类型输入参数。