joh*_*ohn 4 api asp.net-web-api asp.net-web-api2 webapi2
我有一个动作
[HttpPatch]
public IHttpActionResult foo(int id, [FromBody]bool boolVariable)
{
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
我仍在调试,当我尝试用 Postman 发送一些数据时,我收到一个奇怪的错误
"Message": "请求无效。", "MessageDetail": "参数字典包含一个非空类型 'System.Boolean' 的参数 'boolVariable' 的空条目,用于方法 'System.Web.Http.IHttpActionResult foo (Int32, Boolean)' in 'ProjectName.Controllers.NameController'。可选参数必须是引用类型、可为空类型或声明为可选参数。”
问题是它没有将 boolVariable 与我的 json 主体绑定...是的,我可以使用绑定模型轻松解决问题
public class FooBindModel
{
public bool boolVariable{ get; set; }
}
public IHttpActionResult foo(int id, FooBindModel bindModel)
{
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
但是它困扰着我,为什么它不从 json 的主体中绑定变量?我在动作参数中指定 [FromBody] ...
这实际上是您确实需要使用经常被误用的[FromBody]属性的情况。默认情况下,Web Api 会尝试将请求正文作为对象读取,这使得[FromBody]在处理对象时属性变得多余。
但是,当您的请求正文中有值类型时,您需要告诉 Web Api 您想从正文中获取您的值类型,这就是这样[FromBody]做的。
So to solve this you should specify the [FromBody] bool boolVariable and only send the bool value in the body, i.e
true
Read more under the Using [FromBody] section
| 归档时间: |
|
| 查看次数: |
4421 次 |
| 最近记录: |