OData.Net 不允许在 $filter 中包含

OData.Net doesn't allow contains in the $filter

我到处都读到在 OData v3 中你应该使用 substringof() 而在 v4 中你应该使用 contains()。我从 NuGet 安装了 Microsoft.AspNet.WebApi.OData,版本为 5.5.1

奇怪的是,contains() 不起作用。我收到以下错误:

{"message":"The query specified in the URI is not valid. An unknown function with name 'contains' was found. This may also be a key lookup on a navigation property, which is not allowed." ... }

相反,substringof() 工作正常。应该是这样吗?

NuGet 包版本是 5.5.1,但这不是指支持的 OData 版本。由于 OData v1-3 和 OData v4 有一些不兼容的变化,WebAPI OData 包有两个版本:

ASP.NET Web API 2.2 for OData v1-3

包 ID:Microsoft.AspNet.WebApi.OData,版本:5.5.1

ASP.NET Web API 2.2 for OData v4

包 ID:Microsoft.AspNet.OData,版本:5.6.0

所以您目前使用的是 OData v3,错误信息是正确的,contains() is not defined in OData v3

为 WebApi 启用 OData 的两个 NuGet 包如下:

Microsoft.AspNet.WebApi.OData 用于 OData v1-3

Microsoft.AspNet.OData 对于 OData v4

尽管 v4 的名称中没有提到 WebApi,但它仍然是可以使用的。命名已更改并反映了包 ID(lukehellrunner 包括这些)

两者的当前版本均为 5.7.0。