C# jQuery Ajax调用MVC的数组参数为空

C# jQuery Ajax调用MVC的数组参数为空,c#,jquery,arrays,asp.net-mvc,asp.net-web-api,C#,Jquery,Arrays,Asp.net Mvc,Asp.net Web Api,我有一个简单的MVC api方法: [System.Web.Http.HttpPost] // Important: it is not System.Web.Mvc.HttpPost public void MyMethod(object[] arr) { ... } 我使用以下javascript调用它: $.ajax({ url: url, method: "POST", data: { arr: ['1','2']}, dataType: "j

我有一个简单的MVC api方法:

[System.Web.Http.HttpPost]  // Important: it is not System.Web.Mvc.HttpPost
public void MyMethod(object[] arr)
{
    ...
}
我使用以下javascript调用它:

$.ajax({
    url: url,
    method: "POST",
    data: { arr: ['1','2']},
    dataType: "json",
    traditional: true,
    error: function (e) {
        ...
    },
    success: function (res) {
        ...
    }
});
调用成功,但C#代码中的arr值为空数组(字符串[0])。我发现多个这样的电话样本建议主要添加传统的:true,但它仍然不起作用。我还尝试提供不同格式的数据,例如:

  • 数据:{arr:['1','2']}
  • 数据:{['1','2']}
  • 数据:['1','2']
  • stringify(['1','2'])

这些都不管用。想法?

您需要指定
[FromBody]
参数:

[System.Web.Http.HttpPost]  // Important: it is not System.Web.Mvc.HttpPost
public void MyMethod([FromBody] object[] arr)
{
    ...
}
您的代码应该是:

$.ajax({
    url: url,
    method: "POST",
    data: ['1','2'],
    dataType: "json",
    traditional: true,
    error: function (e) {
        ...
    },
    success: function (res) {
        ...
    }
});
如果指定一个键/值,如
{Arr:['1',2']}
,则应为正文创建一个结构:

class MyMethodPostJson
{
    public List<string> Arr;
}
可能重复的
[System.Web.Http.HttpPost]  // Important: it is not System.Web.Mvc.HttpPost
public void MyMethod([FromBody] MyMethodPostJson arr)
{
    ...
}