使用BeginForm将表单数据发布到ASP.NET MVC API控制器

时间:2013-09-18 15:42:45

标签: asp.net asp.net-mvc asp.net-web-api

基本上,我有一个API控制器,其中包含以下方法:

public void Post([FromBody] string value)
{
   Repository.Save(value);
}

我像这样构建我的表格:

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "Post", Url = "/api/MyController"}))
{
   <input type="text" name="value" value="" />
   <input type="submit" value="Post" />
}

请求被路由到控制器,但由于某种原因,始终为空。我已尝试使用和不使用[FromBody]属性。

可以显然在URL中附加查询字符串参数,但我真的想弄清楚如何使用简单类型发布表单数据(而不是创建我自己的DTO类型。)

谢谢!

1 个答案:

答案 0 :(得分:1)

默认情况下,Web API会尝试从请求URI中获取简单类型。 FromBody属性告诉Web API从请求正文中读取值。

Web API最多读取一次响应主体,因此只有一个操作参数可以来自请求主体。如果需要从请求主体获取多个值,请定义复杂类型。

其次,客户端需要使用以下格式发送值:

=值

而不是这样:

值= FOO

因此,如果你发布这样的数据$.post('/api/myapicontroller', { "": $('#myinput').val() });它应该可以正常工作,如果你想发送一个简单类型的数组,只需发送这样的数据$.post('/api/myapicontroller', { "": ["update one", "update two", "update three"] });

如果您使用Fiddler,只需将=John+Smith添加到请求正文中,并确保您拥有正确的内容类型:Content-Type: application/x-www-form-urlencoded