WCF OData服務,我們需要提供一個活動Feed中的API(Facebook認爲),我們決定給OData的一個嘗試。我們使用.NET,因此我們選擇了WCF數據服務,但我們不使用實體框架(或任何其他ORM),因此我們將使用反射提供程序。因爲我們對檢索方法有複雜的業務邏輯,所以我們決定將它們公開爲服務操作。但是我們想要將Delete/Update和單個實體選擇作爲正常的OData REST資源公開。我的問題是我們如何能夠實施限制訪問的集合,但允許訪問單個實體(由關鍵要求)的反射提供數據源,可以刪除/ PUT/POST動詞,也允許訪問單個實體的子集(即服務/分類(1)/產品)。基本上,我只是想限制訪問基地集合(即服務/類別或服務/產品)與反思提供商
Q
與反思提供商
6
A
回答
5
這裏沒有足夠大的答案。
有兩種設置,可以在裏面InitializeService使用(..)
config.SetEntitySetAccessRule("Feed", EntitySetRights.ReadSingle);
config.SetEntitySetPageSize("Feed", 1);
遺憾的是沒有做你想要什麼:
EntitySetRights.ReadSingle
限制你從一組只返回一個對象。因爲它不允許這個/ Categories(1)/ Products而失敗,並且它也允許/ Categories?$ filter = ...返回一行。SetEntitySetPageSize
將初始加載的數量限制在只有一條記錄的位置,但您可以按照$ skiptoken去獲取一條記錄的其餘數據,就像(1)它允許任意查詢不只是關鍵謂詞。
這使得你只有一個現實的選擇。訪問LINQ表達式並確定是否允許正在嘗試的內容。
由於您使用的是反射提供商,你基本上需要包裝從您的「語境」類返回的IQueryables,查找無效的查詢,傳遞他們之前。
不是爲暈倒善良。
如果您決定沿着這條路走下去,您會發現我的IQueryable wrapping example有用,您還應該查看Viteks blog post series on Data Service expressions。
希望這有助於
克斯(OData的項目經理)
相關問題
- 1. Laravel 5 FatalErrorException與提供商
- 2. 網絡提供商與GPS提供商模擬位置android
- 3. 擴展服務提供商(提供商)
- 4. Odata edm vs反射提供商
- 5. GPS提供商不提供
- 6. MSDAORA提供商
- 7. 角提供商
- 8. OpenId提供商
- 9. 提供商
- 10. Angular2提供商
- 11. 與反思
- 12. 反思與WCF
- 13. 與反思
- 14. MEF與反思
- 15. 與反思
- 16. Jayata Data api與OData提供商 - 提供商後備失敗錯誤
- 17. 如何無效Identiy提供商(WSO2 IS 5.0.0)與服務提供商會話
- 18. yii2 ActiveData提供商
- 19. Android GPS提供商
- 20. Java OAuth提供商
- 21. 內容提供商
- 22. 提供商配方
- 23. 的LocationManager提供商
- 24. 內容提供商
- 25. 鏈接提供商
- 26. 錯誤提供商
- 27. 錯誤與會員AD提供商
- 28. o數據與自定義提供商
- 29. 問題與F#的R型提供商
- 30. SAML服務提供商與ColdFusion
非常感謝你。當我評估選項時,我實際上閱讀了包裝示例和自定義數據提供程序系列。實際上,第一種解決方案似乎並不那麼糟糕。我將不得不檢查有多少實體會收集孩子,還有多少人需要解決。我徘徊的另一件事是,如果在這種情況下拋出異常是可以的。這看起來很糟糕,但其他選項也不太好。包裝IQueryable看起來非常痛苦。老實說,我寧願放棄OData解決方案,並去做其他的服務類型。 – Stilgar 2010-09-17 22:18:14