我有一个动作
[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] ......
答案 0 :(得分:2)
实际上,您确实需要使用经常被滥用的.d.ts
属性。
默认情况下,Web Api会尝试将请求主体作为一个对象读取,这使得[FromBody]
属性在处理对象时更加重要。
但是当您在请求正文中有值类型时,您需要告诉Web Api您希望从正文中获取您的值类型,这就是[FromBody]
所做的。
所以要解决这个问题,你应该指定[FromBody]
并且只在体内发送bool值,即
下阅读更多内容真