如何在web api中从modelstate中排除导航属性验证

时间:2014-07-22 05:37:13

标签: odata asp.net-web-api2 asp.net-mvc-5.1

我正在使用带有Web API 2和OData的Asp.net MVC 5。我在web api中使用ODataControllers。我有一个联系类,它有一个导航属性公司,公司在其name属性上有一个必需的属性。在web api contact controller的post动作中,我在保存数据之前检查ModelState.IsValid。现在的问题是,当我在web api上发布联系人数据时,其ModelState.IsValid属性每次都返回false,因为公司导航属性具有带必需属性的属性Name。所以模型状态抛出错误名称字段是必需的。所以请帮我从验证检查中排除公司导航属性。希望得到一些积极的回应。 感谢

4 个答案:

答案 0 :(得分:2)

@ FengZhao-MSFT感谢您的回复,但我发现了这个问题的主要原因。这是因为当我发布联系对象时,它也发送company =“”,companyID = 1,在公布的数据中公司是联系人的导航属性。所以这个公司=“”正在创建问题,因为当数据转到post方法时它会创建一个新的公司实例并抛出所需名称字段的模型状态错误。如果我们从发布的数据中删除company =“”,只发送companyID问题解决。还有一件事我们正在为所有资源使用通用的ajax post方法,因此我们无法从请求中排除comapny =“”。现在我们已经使用actionfilter在服务器端排除了它,我们从modelstate中删除了公司验证错误。感谢

答案 1 :(得分:1)

我遇到了同样的问题。 实际上这种类型的问题只发生在OdataController中。 MvcController操作忽略导航属性验证。

答案 2 :(得分:0)

是的,你是对的。 company=""是问题的根本原因。

我不知道如何使用ajax post方法,但您可以尝试将company=""更改为company=null,然后请求正文应该像

{
....
"company":null
...
}

我认为这个请求会有效。 (我不知道ajax是否可以这样做。)

答案 3 :(得分:0)

没有“公司”:null无效。它还创建了类似于“公司”的公司对象:“”因此,只有解决方案是发布ajax请求而不在数据中发送“公司”。