我正在尝试做一些我认为相当简单的事情。我有一个 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 Controller 方法中,如下所示:
public void Post(int[] Level)
{
}
使用 Chrome 的网络工具进行诊断,确认请求包含表单数据,正如我所期望的那样:
Level=10&Level=20&Level=30
问题在于 Level 参数始终为空。我显然希望它是一个包含 3 个元素(值分别为 10、20 和 30)的数组。
有很多关于类似事情的帖子,但我找不到任何谈论 Web API 模型绑定(bind)而不是 MVC 的帖子,或者那些似乎提示旧版本候选版本中所做的更改的帖子。
有人能给我指出正确的方向吗?
最佳答案
如果您希望绑定(bind)正文 Level=10&Level=20&Level=30
,则您的操作方法参数将需要如下所示。
public HttpResponseMessage Post(MyClass c)
{
// Use c.Level array here
}
public class MyClass
{
public int[] Level { get; set; }
}
相反,如果您希望操作方法参数为 int[] 级别
,则您的 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 将整个正文绑定(bind)到一个参数中。
关于asp.net-web-api - MVC Web API 通过 x-www-form-encoded 发布整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324529/