基本上,我有一个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类型。)
谢谢!
答案 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
。