我使用的是asp.net 4.5和最新的MVC版本。在html页面中发布表单时,我需要从标题中检索deviceId
和body
。在行public void Post([FromBody]string value)
值处,它始终为空。
我在这里做错了什么?
namespace WebApi.Controllers
{
public class NotificationController : ApiController
{
// GET api/notification
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/notification/5
public string Get(int id)
{
return "value";
}
// POST api/notification
public void Post([FromBody]string value)
{
// value it is always null
}
// PUT api/notification/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/notification/5
public void Delete(int id)
{
}
}
}
<form action="/api/notification" method="post">
DeviceId: <input name="deviceId" value="gateeMachine">
Body: <input name="body" value="Warning Out of Paper">
<button>Tes send</button>
</form>
答案 0 :(得分:5)
模型绑定器将参数与表单中名称属性的值匹配。我发现创建模型不太令人头疼(以下是未经测试的代码):
public class Devices
{
public string DeviceId { get; set; }
public string Body { get; set; }
}
行动:
public void Post(Devices device)
{
}
表格:
<form action="/api/notification" method="post">
Device Id: <input name="DeviceId" value="gateeMachine">
Body: <input name="Body" value="Warning Out of Paper">
<button>Test send</button>
</form>
- 编辑:事实证明,不支持绑定多个表单值(请参阅this answer),因此模型是可行的方法。您可以将表单值序列化为查询字符串。您还可以将值序列化为单个字符串(即JSON或XML),然后反序列化服务器端,但实际上,模型是此处最直接的路径。
答案 1 :(得分:0)
你的帖子接受一个参数'value',你试图发送两个参数'deviceId'和'body'。修复这将是一个很好的起点。