我有一个动作
[HttpPatch]
public IHttpActionResult foo(int id, [FromBody]bool boolVariable)
{
return Ok();
}
我仍在调试,当我尝试使用Postman发送一些数据时,出现一个奇怪的错误
"消息": "请求无效。 "MessageDetail": "参数字典包含不可为空类型"System.Boolean"的参数"boolVariable"的空条目 方法 'System.Web.Http.IHttpActionResult foo(Int32, 布尔值('在"项目名称.控制器.名称控制器"中。一个可选的 参数必须是引用类型、可为 null 的类型或声明为 一个可选参数。
问题是它没有将 boolVariable 与我的 json 主体绑定......是的,我可以使用绑定模型轻松解决问题
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
并且仅在正文中发送布尔值,即
真
在"使用 [FromBody] 部分下阅读更多内容