当 json 数据包含的属性多于 OData 控制器中定义的 Post 方法所需的属性时,我对 OData 控制器的发布请求有问题。MVC 控制器应该允许所谓的过度发布,但似乎 OData 控制器不接受它。请查看以下示例。
我有一个简单的实体类:
public class Skill
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(100)]
public string Name { get; set; }
public SkillAffiliation ApplicableTo { get; set; }
}
- SkillAffiliation 是一个枚举。
还有一个简单的 OData 控制器,带有 Post 方法,如下所示:
public IHttpActionResult Post(Skill skill)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_dbContext.Skills.Add(skill);
_dbContext.SaveChanges();
return Created(skill);
}
问题是我使用了第三方 Web 控件集合,并且应该使用我的 OData 控制器的控件添加了一个额外的 json 属性,基本上 POST 请求如下所示:
{"Name":"TEST2","ApplicableTo":"Vehicle","ApplicableTo_input":"Vehicle"}
所以有一个额外的 ApplicableTo_input 属性——不幸的是,这会导致模型验证错误。ModelState.IsValid 属性设置为 false,并且出现错误消息“类型 'Mango.Models.Skill' 上不存在属性 'ApplicableTo_input'。确保仅使用类型定义的属性名称。” 添加这个额外的属性显然是他们解决方案中的一个错误,并将在下一个版本中修复,但是在那之前我必须找到一些解决方法。
我已经尝试将 [Bind(Exclude="ApplicableTo_input")] 属性添加到我的发布操作参数中,但它似乎不起作用。有任何想法吗?