【发布时间】:2013-10-06 06:43:03
【问题描述】:
我正在尝试获取使用 web api 的发布请求。以下是我的 api 控制器。
public class WebsController : ApiController
{
[HttpPost]
public void PostOne(string id)
{
}
[HttpPost]
public void PostTwo(Temp id)
{
}
}
我已更改 webapi 路由以考虑该操作。 Temp 模型看起来像这样。
public class Temp
{
public string Id { get; set; }
}
我的视图看起来像这样
@using (Ajax.BeginForm(new AjaxOptions
{
Url = "/api/webs/postone",
HttpMethod = "post"
}))
{
<input name="id" id="id" value="2" />
<input type="submit" value="submit" />
}
除非我像这样将 [FromBody] 属性放在参数前面,否则上面的代码对 postone 根本不起作用。
[HttpPost]
public void PostOne([FromBody]string id)
{
}
然后它触发了动作,但 id 仍然为空。它不会填充文本框中的值。
但是,如果我将 Ajax.BeginForm 的 Url 更改为 posttwo 以采用 Temp 模型,它可以很好地工作并且 Id 字段在文本框中得到正确的值。
谁能解释一下发生这种情况的原因以及如何将一个简单的值发布到 Web api 操作?我的意思是,为什么它可以绑定复杂类型而不是简单类型。
【问题讨论】:
-
是的,我知道。它只是浪费了我半天的工作时间,只是为了找出没有给 jQuery ajax 中的参数命名的小线索。
-
嗯...所有的cmets在哪里?
-
这有点奇怪……可能需要报告一下,看看出了什么问题。有没有可能是用户被删除了,间接删除了cmets?
标签: c# asp.net-mvc-4 asp.net-web-api http-post