基本上,我有一个具有以下方法的 API Controller :
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" />
}
请求被路由到 Controller ,但由于某种原因值始终为空。我尝试过使用和不使用 [FromBody] 属性。
我可以显然将值查询字符串参数附加到URL,但我真的想弄清楚如何使用简单类型发布表单数据(而不是创建我自己的 DTO 类型)。
谢谢!
最佳答案
默认情况下,Web API 尝试从请求 URI 获取简单类型。 FromBody 属性告诉 Web API 从请求正文中读取值。
Web API 最多读取一次响应正文,因此一个操作只能有一个参数来自请求正文。如果您需要从请求正文中获取多个值,请定义复杂类型。
其次,客户端需要发送以下格式的值:
=值
而不是这样:
值=foo
因此,如果您像这样发布数据 $.post('/api/myapicontroller', { "": $('#myinput').val() });
它应该工作得很好,如果您想发送简单类型的数组,只需发送这样的数据 $.post('/api/myapicontroller', { "": ["update one", "update Two", “更新三”] });
如果您使用 Fiddler,只需将 =John+Smith
添加到请求正文,并确保您具有正确的内容类型,如下所示:Content-Type: application/x-www-form -urlencoded
。
关于asp.net - 使用 BeginForm 将表单数据发送到 ASP.NET MVC API Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876694/