MVC Web API通过x-www-form-encoded发布整数数组

时间:2014-10-12 11:13:38

标签: asp.net-web-api

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

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

我试图将此接收到这样的MVC Web API控制器方法中:

public void Post(int[] Level)
{

}

使用Chrome网络工具进行诊断确认该请求包含我期望的表单数据:

Level=10&Level=20&Level=30

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

有很多关于类似事情的帖子,但是我找不到任何关于Web API模型绑定而不是MVC的帖子,或那些似乎在抱怨旧版本发布候选版本所做的更改。< / p>

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

如果你想绑定身体Level=10&Level=20&Level=30,你需要你的动作方法参数。

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

public class MyClass
{
    public int[] Level { get; set; }
}

相反,如果您希望action方法参数为int[] Level,则您的HTTP消息必须如此。

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将整个主体绑定到一个参数中。