将带有字符串的json数组发布到Asp.Net MVC操作控制器始终为null

use*_*245 4 asp.net-mvc binding json model

我不能让Asp.Net MVC绑定作为json对象发送的字符串列表,除非我将它们包装在一个类中.我很难相信包装这样的列表是必须的.一直在看各种例子,什么不是几个小时,但无法得到任何其他解决方案.我错过了什么?下面的工作和非工作代码.

$.ajax({
        type: "POST",
        traditional: true,
        url: "keyapi/activate.json",
        data: JSON.stringify({ "keys": [ "1", "2" ] }),
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            alert(data);
    }
});
Run Code Online (Sandbox Code Playgroud)

当使用动作控制器(例如下面的"键")时,它将为空.

[HttpPost]
public Response<List<string>> ActivateKeys(List<string> keys)
{
    return KeyService.ActivateKeys(test.Keys);
}
Run Code Online (Sandbox Code Playgroud)

如果我添加一个类来包装列表就可以了.我被迫这样做了,还是我在这里遗漏了什么?下面的代码使用相同的jquery邮政编码.

[HttpPost]
public Response<List<string>> ActivateKeys(Test test)
{
    return KeyService.ActivateKeys(test.Keys);
}
public class Test
{
    List<string> Keys { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Cla*_*edi 5

我建议两件事

1)更换

data: JSON.stringify({ "keys": [ "1", "2" ] }),
Run Code Online (Sandbox Code Playgroud)

通过

data: JSON.stringify([ "1", "2" ] ), // <-- Send the array directly
Run Code Online (Sandbox Code Playgroud)

这样做你将传递一个数组作为参数而不是一个包含名为的数组的对象 keys

2)如果以前的建议不起作用,请更换

ActivateKeys(List<string> keys)
Run Code Online (Sandbox Code Playgroud)

通过

ActivateKeys(IList<string> keys) // <-- Use interface IList<T>
Run Code Online (Sandbox Code Playgroud)

因为不是100%确定mvc引擎是否能够解决 List<string>