6

基本上,我有一个具有以下方法的 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 类型)。

谢谢!

4

1 回答 1

1

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

Web API 最多读取一次响应体,因此一个动作的一个参数只能来自请求体。如果您需要从请求正文中获取多个值,请定义一个复杂类型。

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

=价值

而不是这样:

价值=富

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

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

于 2013-09-18T17:15:04.337 回答