没有目标实体的OData Action

时间:2013-05-10 18:44:34

标签: wcf-data-services odata

是否可以将OData Action绑定到特定实体或实例,而是可以在集合上调用?比如...

http://server:port/MyOdataService/Notifications/ClearAll

其中Notifications是ResourceSet,ClearAll是一个动作。我把它比作C#中的静态方法,有点。

显而易见的解决方法是使用“全局”操作或旧的ServiceOperation,但我宁愿不要将某些操作放在高位或强行使用繁琐的名称。

2 个答案:

答案 0 :(得分:2)

在OData协议级别,将一个动作参数绑定到一组实体是有效的。例如,如果Notifications实体集由类型为MyNamespace.Notification的实体组成,则该操作的绑定参数的类型为Collection(MyNamespace.Notification)

在WCF数据服务操作提供程序中,我认为只需将ServiceAction.BindingParameter.ParameterType设为CollectionResourceType(通过ResourceType.GetCollectionResourceType(/* notification type */)获取)即可。 (虽然我没有试过这个。)

答案 1 :(得分:0)

我知道这是一个老问题,但我今天早些时候遇到过这个问题。 (我没有这个问题,但我发现了这个问题并回想起解决方案 - 为什么不提供两者之间的联系?)

http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ODataActionsSample/ODataActionsSample.sln

有一个例子

查看NonBindableActionRoutingConvention.csNonBindableActionsController.cs文件,了解您需要做什么。