4

我有一个动作

[HttpPatch]
public IHttpActionResult foo(int id, [FromBody]bool boolVariable)
{
 return Ok();
}

我仍在调试,当我尝试使用 Postman 发送一些数据时,我收到了一个奇怪的错误

"Message": "请求无效。", "MessageDetail": "参数字典包含方法 'System.Web.Http.IHttpActionResult foo 的不可空类型 'System.Boolean' 的参数 'boolVariable' 的空条目(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();
}

但是它困扰着我,为什么它不从 json 的主体中绑定变量?我在动作参数中指定 [FromBody] ...

4

1 回答 1

6

这实际上是您真正需要使用经常被误用的[FromBody]属性的情况。默认情况下,Web Api 会尝试将请求正文作为对象读取,这使得[FromBody]在处理对象时属性变得多余。

但是,当您的请求正文中有值类型时,您需要告诉 Web Api 您想从正文中获取值类型,这就是这样[FromBody]做的。

所以要解决这个问题,你应该指定[FromBody] bool boolVariable并且只在正文中发送 bool 值,即

真的

在使用 [FromBody]部分下阅读更多信息

于 2017-08-23T15:25:44.140 回答