是否可以有一个不绑定到特定实体或实例但可以在集合上调用的 OData 操作?如...
http://server:port/MyOdataService/Notifications/ClearAll
其中 Notifications 是一个 ResourceSet,而 ClearAll 是一个动作。在某种程度上,我将其比作 C# 中的静态方法。
明显的解决方法是使用“全局”操作或旧的 ServiceOperation,但我不希望我的一些操作范围太高或被迫使用繁琐的名称。
是否可以有一个不绑定到特定实体或实例但可以在集合上调用的 OData 操作?如...
http://server:port/MyOdataService/Notifications/ClearAll
其中 Notifications 是一个 ResourceSet,而 ClearAll 是一个动作。在某种程度上,我将其比作 C# 中的静态方法。
明显的解决方法是使用“全局”操作或旧的 ServiceOperation,但我不希望我的一些操作范围太高或被迫使用繁琐的名称。
在 OData 协议级别,将操作参数绑定到实体集合是有效的。例如,如果Notifications
实体集由类型为 的实体组成MyNamespace.Notification
,则操作的绑定参数的类型为Collection(MyNamespace.Notification)
。
在 WCF 数据服务操作提供程序中,我相信这可以通过制作ServiceAction.BindingParameter.ParameterType
a CollectionResourceType
(通过 获得ResourceType.GetCollectionResourceType(/* notification type */)
)来实现。(虽然我还没有尝试过。)
我知道这是一个老问题,但我今天早些时候遇到了一个解决方案。(我没有这个问题,但我发现了这个问题并记得阅读了解决方案 - 为什么不提供两者之间的链接?)
在http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ODataActionsSample/ODataActionsSample.sln有一个例子
查看NonBindableActionRoutingConvention.cs
和NonBindableActionsController.cs
文件以了解您需要做什么。