从Javascript传递JSON数组到Web API控制器方法

13

我无法在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 数组参数。


你尝试过将数据作为JSON进行POST请求吗(参见https://dev59.com/um035IYBdhLWcg3wMM8G)?然后在你的控制器中,你可以使用`[FromBody]`属性从请求体中检索这些数据。 - Nikolai Samteladze
3个回答

11

尝试以下代码:

模型方法声明如下:

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


重要提示:模型类必须具有默认构造函数和公共设置器,否则此方法将无法正常工作。 - Métoule

5
我在搜索解决我的问题——尝试将对象的列表/数组传递给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 operation.    
}

这样,您就不必像Veera的答案中那样创建另一个包含列表对象的类。

1

try like this:

$.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.    
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接