我有动作
[HttpPatch]
public IHttpActionResult foo(int id, [FromBody]bool boolVariable)
{
return Ok();
}
我仍在调试中,当我尝试用邮递员发送一些数据时,出现一个奇怪的错误
“ Message”:“请求无效。”,
“ MessageDetail”:“参数字典包含用于参数'boolVariable'的空条目,该参数的非空类型'System.Boolean'用于
方法'System.Web.Http.IHttpActionResult foo(Int32,
布尔)”在“ ProjectName.Controllers.NameController”中。可选的
参数必须是引用类型,可为空的类型,或声明为
可选参数。”
问题是它没有与我的json主体绑定boolVariable ...是的,我可以轻松地使用绑定模型解决问题
public class FooBindModel
{
public bool boolVariable{ get; set; }
}
public IHttpActionResult foo(int id, FooBindModel bindModel)
{
return Ok();
}
但是,这困扰着我为什么不绑定json主体中的变量?我在动作参数中指定[FromBody] ...
最佳答案
实际上,在这种情况下,您确实需要使用经常被滥用的[FromBody]
属性。
默认情况下,Web Api将尝试将请求正文作为对象读取,这使得[FromBody]
属性在处理对象时变得多余。
但是,当请求主体中有值类型时,您需要告诉Web Api您想从主体中获取值类型,这就是[FromBody]
的作用。
因此,要解决此问题,您应指定[FromBody] bool boolVariable
并仅在正文中发送bool值,即
真正
在Using [FromBody]部分下阅读更多内容