Asp.net web api MVC Web API通过x-www-form-encoded发布整数数组

Asp.net web api MVC Web API通过x-www-form-encoded发布整数数组,asp.net-web-api,Asp.net Web Api,我正在尝试做一些我认为相当简单的事情。我有一个HTML表单,它发布了一组整数输入,全部称为“Level”: 通过Chrome的网络工具进行诊断,确认请求中包含的表单数据符合我的预期: Level=10&Level=20&Level=30 问题是Level参数始终为null。很明显,我希望它是一个数组,包含3个值为10、20和30的元素 有太多关于类似事情的帖子,但我找不到任何关于WebAPI模型绑定而不是MVC的帖子,或者那些似乎在抱怨旧版本候选版本中所做的更改的帖子 有人能给

我正在尝试做一些我认为相当简单的事情。我有一个HTML表单,它发布了一组整数输入,全部称为“Level”:

通过Chrome的网络工具进行诊断,确认请求中包含的表单数据符合我的预期:

Level=10&Level=20&Level=30
问题是Level参数始终为null。很明显,我希望它是一个数组,包含3个值为10、20和30的元素

有太多关于类似事情的帖子,但我找不到任何关于WebAPI模型绑定而不是MVC的帖子,或者那些似乎在抱怨旧版本候选版本中所做的更改的帖子


有人能给我指出正确的方向吗?

如果你想绑定正文
Level=10&Level=20&Level=30
,你需要动作方法参数像这样

public HttpResponseMessage Post(MyClass c)
{
    // Use c.Level array here
}

public class MyClass
{
    public int[] Level { get; set; }
}
POST http://server/api/levels HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

=10&=20&=30
相反,如果希望操作方法参数为
int[]Level
,则HTTP消息必须如下所示

public HttpResponseMessage Post(MyClass c)
{
    // Use c.Level array here
}

public class MyClass
{
    public int[] Level { get; set; }
}
POST http://server/api/levels HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

=10&=20&=30
为此,请使用这样的形式

<form action="/api/levels" method="post">
    <input name="" value="10" />
    <input name="" value="20" />
    <input name="" value="30" />
    <button type="submit">submit</button>
</form>

提交

这种奇怪的原因是ASP.NET Web API将整个主体绑定到一个参数中。

感谢您的响应,不得不使用未命名的表单变量似乎是一种非常糟糕的方法。Web API真的不能以一种更干净的方式处理这个问题吗?我刚刚通过一些MVC单元测试,找到了一个与您的答案完全相同的测试,因此a)谢谢您,b)Microsoft您在想什么!