我有一个行动
[HttpPatch]
public IHttpActionResult foo(int id, [FromBody]bool boolVariable)
{
return Ok();
}
我仍在调试,当我尝试使用 Postman 发送一些数据时,我收到一个奇怪的错误
"Message": "The request is invalid.", "MessageDetail": "The parameters dictionary contains a null entry for parameter 'boolVariable' of non-nullable type 'System.Boolean' for method 'System.Web.Http.IHttpActionResult foo(Int32, Boolean)' in 'ProjectName.Controllers.NameController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
问题是它没有将 boolVariable 与我的 json 主体绑定(bind)...是的,我可以使用绑定(bind)模型轻松解决问题
public class FooBindModel
{
public bool boolVariable{ get; set; }
}
public IHttpActionResult foo(int id, FooBindModel bindModel)
{
return Ok();
}
但是它让我烦恼为什么它不绑定(bind) json 主体中的变量?我在操作参数中指定 [FromBody]...
最佳答案
这实际上是您确实需要使用经常被误用的 [FromBody]
属性的情况。
默认情况下,Web Api 会尝试将请求正文作为对象读取,这使得在处理对象时 [FromBody]
属性变得多余。
但是,当您的请求正文中有值类型时,您需要告诉 Web Api 您希望从正文中获取值类型,这就是 [FromBody]
所做的。
因此,要解决此问题,您应该指定 [FromBody] bool boolVariable
并仅在正文中发送 bool 值,即
true
在Using [FromBody]下阅读更多内容部分
关于api - ASP.NET Web API 2 主体类型( bool 值)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45803421/