将JSON数组从Javascript传递到Web API Controller方法

时间:2014-10-21 05:42:06

标签: asp.net-web-api .net-4.5 arrays asp.net-apicontroller

我无法在web api控制器方法(SaveDetails)中获取JSON数组参数。
这是我的代码。

JavaScript代码:

  $.ajax(
    {
        url  : "api/Test/SaveDetails",
        type : "POST",
        data : {
                    "employees":
                    [
                        { "firstName": "John", "lastName": "Doe" },
                        { "firstName": "Anna", "lastName": "Smith" },
                        { "firstName": "Peter", "lastName": "Jones" }
                    ]
                },
        success: function (data) {alert("success");},
        error: function () {alert("Error");}
    })
    

控制器方法

[HttpPost]
public DataSet SaveDetails(Models.Person[] obj)
{
    //save opertion.    
}

模型方法:

 public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
}

在web api方法中获取JSON数组参数有哪些更改。

3 个答案:

答案 0 :(得分:7)

请尝试以下代码:

声明模型方法,如下所示:

public class Models.employees
{
    public string firstName { get; set; }
    public string lastName { get; set; }
}

public class Models.RootObject
{
    public List<employees> employees { get; set; }
}

<强>控制器:

[HttpPost]
public DataSet SaveDetails([FromBody]RootObject Person)
{
    //save opertion.    
}

这是预期的结果Output

答案 1 :(得分:2)

我在搜索问题的答案时遇到了这个问题,尝试将对象列表/数组传递给web api控制器。

此链接的详细信息: https://kwilson.io/blog/post-an-array-of-objects-to-webapi-using-jquery/

  

将您的数据更改为单个匿名对象而不是原始数组,它将起作用。

因此,在您的情况下,您可以为数据执行以下操作

data : {
                "":
                [
                    { "firstName": "John", "lastName": "Doe" },
                    { "firstName": "Anna", "lastName": "Smith" },
                    { "firstName": "Peter", "lastName": "Jones" }
                ]
            },

在您的Web API控制器中

[HttpPost]
public DataSet SaveDetails(List<Models.Person> obj)
{
    //save opertion.    
}

这样你就不必创建另一个类来保存列表对象,就像在Veera的答案中一样。

答案 2 :(得分:1)

尝试这样:

$.ajax(
    {
        url  : "api/Test/SaveDetails",
        type : "POST",
        contentType : 'application/json',
        data : {
                    "obj":
                    [
                        { "firstName": "John", "lastName": "Doe" },
                        { "firstName": "Anna", "lastName": "Smith" },
                        { "firstName": "Peter", "lastName": "Jones" }
                    ]
                },
        success: function (data) {alert("success");},
        error: function () {alert("Error");}
    })

控制器:

[HttpPost]
public DataSet SaveDetails([FromBody]Models.Person[] obj)
{
    //save opertion.    
}