如何传递一个对象数组的WebAPI列表 [英] How to pass an object array to webAPI List
问题描述
我有一个基本的HTML被调用使用jQuery AJAX调用中的WebAPI的功能。 HTML发送对象应该被映射到函数参数,我收到的列表的数组。如果我从功能删除阵列,并只发送1对象,同时删除列表,然后我的code ++工程和对象被成功地传递给参数。
JavaScript的code是如下
函数Call_Service(){
VAR输入=
{
状态:我的新状态,
类别:我的价值
};
VAR输入2 =
{
状态:我的新状态2,
类别:我值2
};
VAR input_array =新的Array();
input_array [0] =输入;
input_array [1] =输入2;
$阿贾克斯({
键入:POST,
网址:HTTP://本地主机:34989 / API / TMSPortal / objectPOC
数据:input_array,
成功:函数(响应){
警报(响应);
}
});
}
C#的WebAPI是如下
公众的Int64 objectPOC(名单< TMS_STATUS> _Status)
{
Int64的retValu = 0;
的for(int i = 0; I< _Status.Count;我++)
{
retValu ++;
}
返回retValu;
}
正如我才知道,网络API目前不允许超过1复杂的参数,因此我必须让我的工作,通过以下解决方法完成。让我知道,如果有人有更好的解决办法:
改变了Web的API函数接收JObject,然后从中提取我复杂的对象。网络API函数看起来如下:
公众的Int64 objectPOC(JObject jsonWrapper)
{
动态jsonValues = jsonWrapper;
JArray jsonInput = jsonValues.input;
JArray jsonInput2 = jsonValues.input2;
名单< TMS_STATUS> _Status = jsonInput.ToObject<列表< TMS_STATUS>>();
名单< TMS_STATUS> _Status2 = jsonInput2.ToObject<列表< TMS_STATUS>>();
Int64的retValu = 0;
的for(int i = 0; I< _Status.Count;我++)
{
retValu ++;
}
返回retValu;
}
Ajax调用如下:
函数Call_Service(){
VAR输入=
{
状态:我的新状态,
类别:我的价值
};
VAR输入2 =
{
状态:我的新状态2,
类别:我值2
};
VAR input_array =新的Array();
input_array [0] =输入;
input_array [1] =输入2;
警报(input_array [0] .STATUS);
$阿贾克斯({
键入:POST,
的contentType:应用/ JSON的;字符集= UTF-8,
网址:HTTP://本地主机:34989 / API / TMSPortal / objectPOC
数据类型:JSON,
数据:JSON.stringify({
输入:input_array,
输入2:input_array
}),
成功:函数(响应){
警报(响应);
}
});
}
I have a basic HTML which is calling a WebAPI function using jquery ajax call. HTML sends an array of objects which should get mapped to the functions parameter that i am receiving as LIST. If i remove array and send only 1 object and also remove list from function, then my code works and object is passed successfully to the parameter.
JavaScript code is as below
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 is as below
public Int64 objectPOC(List<TMS_STATUS> _Status)
{
Int64 retValu = 0;
for (int i = 0; i < _Status.Count; i++)
{
retValu++;
}
return retValu;
}
As i came to know that Web-API currently don't allow more than 1 complex parameter therefore i had make my work done by following workaround. Let me know if someone has better solution:
Changed the Web-API function to receive JObject and then extracted my Complex objects from it. Web-API functions looks as below:
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 Call is as follows:
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);
}
});
}
这篇关于如何传递一个对象数组的WebAPI列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!