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

标签 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 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/

相关文章:

angular - 尝试将 Angular 属性传递给 .NET API

asp.net-mvc - 如何路由到 MVC4 中某个区域内的 API Controller ?

c# - 为什么我的目录搜索需要这么长时间?

asp.net-mvc-3 - ASP.NET Web API 问题 - 授权/身份验证

c# - 添加多个 GET 动词会出现 AmbigouslyMatchException 错误

performance - 当服务器负载不大时,Azure API 时间缓慢/超时

asp.net - 倒带请求正文流

c# - Newtonsoft json 序列化原始类型 WebApi

entity-framework - Entity Framework 在我的 WebAPI Mvc4 解决方案中无法使用

c# - WebApi 2 程序集解析器