我正在開發一個新的OData項目,並且正在嘗試首次使用Web API 2進行操作。 OData提要非常簡單,與WCF相比,這非常棒。使用Web API指定OData的路徑值
我現在的問題是,我的OData Feed將用於「多租戶」環境中,並且我想根據租戶使用「友好」網址作爲Feed。因此,我非常需要的飼料的URL看起來像這樣:
/store/tenant1/Products
/store/tenant2/Products
兩個網址都指向同一個控制器,並最終相同的數據集,但我想執行的租戶一些實體過濾。顯然這將是困難的,並且與標準Web API路由有所不同,因爲我只能指定路由前綴而不是路由模板。
到目前爲止,我已經修改了我的OData控制器作爲租戶名作爲參數,這創下了以下網址時的偉大工程(這不正是我想要的,看到上面的目標):
http://mydomainname/odata/Products?tenantName=test
使用這個路由定義:
ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Product>("Products");
IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute(routeName: "OData", routePrefix: "odata", model: model);
這是我的控制器上的樣品動作:
[Queryable]
public IQueryable<Product> GetPproducts(string tenantName)
{
return _products.Where(p=>p.TenantName == tenantName);
}
我不太確定這是否可行,我的最後手段是使用URL重寫規則,但我寧願避免這種情況,並且在代碼中完成所有事情,並以正確的方式完成。
非常感謝您的幫助!
謝謝tanjinfu! –
我其實沒有嘗試過你的選擇,但你指出我OData v4,它解決了我面臨的一堆問題。圖書館仍處於alpha階段,但對於我正在做的事情來說,這足夠好。事實證明,使用Microsoft.AspNet.OData 5.2-alpha1(WebAPi for OData v4),路由似乎只適用於標準Web API控制器,不需要解決方法。另外,我的下一個問題是需要POST(我想要GET)的實體集操作,而這個新的庫支持函數,這正是我之前的操作。再次感謝! –
此解決方案是否需要您定義多個odata路線,每個租戶一個?你的WebApiConfig.cs文件是什麼樣的? – philreed