ASP.NET Web API 2基本类型来自body(布尔)错误

时间:2017-08-21 18:21:25

标签: api asp.net-web-api asp.net-web-api2 webapi2

我有一个动作

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

我还在调试,当我尝试用Postman发送一些数据时,我得到一个奇怪的错误

  

"消息":"请求无效。",       " MessageDetail":"参数字典包含参数' boolVariable'的空条目。非可空类型' System.Boolean'对于   方法' System.Web.Http.IHttpActionResult foo(Int32,   布尔值)' 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] ......

1 个答案:

答案 0 :(得分:2)

实际上,您确实需要使用经常被滥用的.d.ts属性。 默认情况下,Web Api会尝试将请求主体作为一个对象读取,这使得[FromBody]属性在处理对象时更加重要。

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

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

  

https://github.com/dropbox/dropbox-sdk-js部分

下阅读更多内容