来自正文(布尔值)错误的 ASP.NET Web API 2 原始类型

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] ...

Mar*_*und 6

这实际上是您确实需要使用经常被误用的[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