在第一个示例中,您使用了一个复杂的对象{'name':'hello'}
当。。。的时候[FromBody]
属性告诉绑定器寻找简单类型。
在第二个示例中,您在正文中提供的值无法解释为简单类型,因为它缺少引号"hello"
使用[FromBody]
强制 Web API 读取简单型在请求正文中,将 [FromBody] 属性添加到参数中:
public HttpResponseMessage Post([FromBody] string name) { ... }
在此示例中,Web API 将使用媒体类型格式化程序从请求正文中读取 name 的值。这是一个客户端请求示例。
POST http://localhost:5076/api/values HTTP/1.1
User-Agent: Fiddler
Host: localhost:5076
Content-Type: application/json
Content-Length: 7
"Alice"
当参数具有 [FromBody] 时,Web API 使用 Content-Type 标头来选择格式化程序。在此示例中,内容类型为“application/json”,请求正文是原始 JSON 字符串(不是 JSON 对象)。
最多允许从消息体中读取一个参数。所以这行不通:
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
此规则的原因是请求正文可能存储在只能读取一次的非缓冲流中。
Source: ASP.NET Web API 中的参数绑定