OData 搜索转换后的属性

OData search on transformed properties

我们通过 OData REST API 服务 json 个对象。对象的粗略结构如下所示

{ "Property1": "Value1", "Property2":{ "InterestingProperty": "/text1/part1/text2/part2" } }

值 "part1" 和 "part2" 是我感兴趣的值,并且从后端将它们一起索引。

我需要设计列表 API,它可以过滤包含特定 属性 中的第 1 部分和第 2 部分的对象。 关于如何进行此操作的任何指导?

您可以使用 $filter query option 和内置的 contains 函数在客户端解决这个问题。例如,

GET http://host/MyObjects?$filter=contains(Property2/InterestingProperty,'part1') and contains(Property2/InterestingProperty,'part2')

但是,这种方法确实允许误报;例如,如果 InterestingProperty 的值类似于 /text1/part1/text2/part234.

也许更好的方法是定义一个服务器端 OData function 来进行自定义过滤。这将允许您对 InterestingProperty 的匹配进行细粒度控制。 MyService 命名空间中名为 CustomFilter 并绑定到 MyObjects 实体集的函数将按如下方式调用:

GET http://host/MyObjects/MyService.CustomFilter

如果您使用的是 OData 的 .NET 实现,tutorial 可以帮助您开始编写 OData 函数。