【问题标题】:How to pass an object array to webAPI List如何将对象数组传递给 webAPI 列表
【发布时间】:2013-02-10 20:12:00
【问题描述】:

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

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;
    }

【问题讨论】:

  • 尝试将 objectPOC 方法参数更改为 TMS_STATUS[] 而不是 List。
  • @KevinJunghans 没用。

标签: jquery ajax asp.net-mvc-4 asp.net-web-api


【解决方案1】:

据我所知,Web-API 目前不允许超过 1 个复杂参数,因此我通过以下解决方法完成了我的工作。如果有人有更好的解决方案,请告诉我:

更改了 Web-API 函数以接收 JObject,然后从中提取我的复杂对象。 Web-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);
    }
});
}

【讨论】:

    【解决方案2】:

    要发送多个复杂类型参数,请创建一个模型并将它们作为模型内的属性公开。在 Web API 中,您只能有 1 个开箱即用的复杂类型输入参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 2012-10-28
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2019-12-13
      • 2016-06-06
      相关资源
      最近更新 更多