我正在尝试做一些我认为相当简单的事情。我有一个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>
有人可以指出我正确的方向吗?
答案 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将整个主体绑定到一个参数中。