如何传递一个对象数组的WebAPI列表 [英] How to pass an object array to webAPI List

查看:3701
本文介绍了如何传递一个对象数组的WebAPI列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基本的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆