我随处读到,在OData v3中你应该使用substringof()
,在v4中你应该使用contains()
。我从NuGet安装了版本 5.5.1 的Microsoft.AspNet.WebApi.OData。
奇怪的是,contains()不起作用。我收到以下错误:
{“message”:“URI中指定的查询无效。找到名为'contains'的未知函数。这也可能是导航属性的键查找,这是不允许的。” ......}
相反,substringof()
工作正常。它应该是那样的吗?
答案 0 :(得分:5)
NuGet包版本是5.5.1,但这并不是指支持的OData版本。由于OData v1-3和OData v4有一些不兼容的更改,因此有两个版本的WebAPI OData包:
适用于OData v1-3的ASP.NET Web API 2.2
包ID:Microsoft.AspNet.WebApi.OData,版本:5.5.1
适用于OData v4的ASP.NET Web API 2.2
包ID:Microsoft.AspNet.OData,版本:5.6.0
所以你现在正在使用OData v3并且错误消息是正确的,在OData v3中没有定义contains()
答案 1 :(得分:0)
启用OData for WebApi的两个NuGet包如下:
适用于OData v1-3的Microsoft.AspNet.WebApi.OData
适用于OData v4的Microsoft.AspNet.OData
即使v4在名称中没有说出WebApi,它仍然是要使用的。命名已更改并反映了包ID(包含这些内容的lukehellrunner)
两者的当前版本均为5.7.0。