2013-05-10 26 views
1

是否有可能具有未綁定到特定實體或實例的OData動作,而是可以在集合上調用?如...沒有目標實體的OData動作

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

其中Notifications是一個ResourceSet,ClearAll是一個操作。我把它比作C#中的一個靜態方法。

顯而易見的解決方法是使用「全局」操作或舊的ServiceOperation,但我寧願沒有我的操作範圍高或強制使用繁瑣的名稱。

回答

2

在OData協議級別,將動作參數綁定到實體集合是有效的。例如,如果Notifications實體集合由類型爲MyNamespace.Notification的實體組成,則該操作的綁定參數將具有Collection(MyNamespace.Notification)的類型。

在WCF數據服務行動提供者內,我相信這是可能的,只需製作ServiceAction.BindingParameter.ParameterType a CollectionResourceType(通過ResourceType.GetCollectionResourceType(/* notification type */)獲得)。 (雖然我還沒有嘗試過。)

+0

這是正確的。花了我一分鐘的時間弄清楚,但我得到它的工作;謝謝。 – object88 2013-05-14 19:38:04

0

我知道這是一個老問題,但今天早些時候我遇到了一個解決方案。 (我沒有這個問題,但我發現這個問題,記得讀解 - 爲什麼不貢獻兩者之間的聯繫)

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

看那NonBindableActionRoutingConvention.csNonBindableActionsController.cs文件爲例你需要做什麼。

+0

該示例似乎適用於WebApi。這個問題是針對WCF數據服務的。 – Vaccano 2014-09-09 23:56:37

+0

斑點:P – 2014-09-10 03:19:24