我有动作

[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]部分下阅读更多内容

10-06 14:20