我想在我的EntitySetController派生控制器類中能夠擁有額外的GetXYZ方法。例如:EntitySetController中的其他GetXYZ方法
[HttpGet]
[Queryable]
public string GetAirportsWithinRadius(int airportId, int radius)
{
var resultAirports = GetAirportsWithinRadius2(airportId, radius);
return resultAirports;
}
這是我的配置:
ActionConfiguration getAirportsWithinRadius = modelBuilder.Entity<Airport>().Collection.Action("GetAirportsWithinRadius");
getAirportsWithinRadius.Parameter<int>("airportId");
getAirportsWithinRadius.Parameter<int>("radius");
getAirportsWithinRadius.ReturnsCollectionFromEntitySet<Airport>("Airports");
我想這個動作是可組合就像默認獲取可查詢的行動,但這將是支持所有的OData替代參數,但另外還有airportId和radius。這將首先通過半徑搜索過濾機場(我知道該怎麼做 - 與問題無關),然後返回Queryable,以便可以通過odata params進一步過濾。
我讀過的一切都表示這將是一個odata動作,因此必須是POST,但Get也是一個動作,那是一個GET,那麼爲什麼不允許擴展的getter使用額外的參數呢?我錯過了什麼嗎?我如何完成我想完成的任務?
我就從一個Ajax客戶端因此稱之爲: GET /的OData /機場$ inlinecount =所有頁& $頂部= 25 & airportId = 2112 &半徑= 50
,而不是一個普通的OData GET :? GET /的OData /機場$ inlinecount =所有頁& $頂部= 25
感謝
編輯: 我現在明白了,這是一個OData的 「功能」,它是理解過程作爲未來功能的考慮。讓我們忘記第二個這個的odata意思。它本質上是一個返回一個Queryable的WebApi HttpGet,對嗎?所以,只要我不關心這個「函數」的元數據廣告,我怎樣才能確保它是一個ODataController內的可路由的HttpGet形式的路徑透視圖? ODataController需要MapODataRoute,並且可以使用額外的MapHttpRoutes額外添加非odata路由嗎? 我問這個,因爲在我看來,我應該能夠,但我所有的嘗試都失敗了(試圖通過提琴手擊中HttpGet)。我無法找到使用其他非odata GET擴展ODataController的示例。有人可以幫助我理解是否和如何這可以用您正在尋找的OData功能,目前還不支持開箱即用的例子?:
[Queryable]
public IQueryable<Airport> Get()
{
return db.Airports;
}
[HttpGet]
[Queryable]
public string GetAirportsWithinRadius(int airportId, int radius)
{
var resultAirports = GetAirportsWithinRadius2(airportId, radius);
return resultAirports;
}
Arrgg :)我添加了我的投票。這非常重要,因爲語義上有許多商業邏輯擴展到了香草Get。任何方式我現在可以解決這個問題,並完成我想要的?我想我可以編寫一個aditional apicontroller ... – t316
您應該從ODataController派生出來,以便OData相關格式化程序進入畫面。但即使我們有這個解決方法,問題是您是否想要在元數據文檔上公開此操作/函數。由於Web API僅支持動作,如果您將其指定爲動作,則元數據文檔會將其顯示爲動作,讀取文檔的客戶端會感到困惑並執行POST。我猜你可以避免完全在元數據文件上顯示。 –
好的 - 這是我想要做的:然後我想使用方便的EntitySetController或ODataController並添加一個名爲GetAirportsWithinRadius(int airportId,int radius)的附加HttpGet。我想使用這種方法只是作爲一個香草webapi控制器的行動方法,我不需要任何元數據(即。正式的odata功能發現 - 因爲它還不存在)。但我需要手動定義一個路線,以允許它從say fiddler中調用。除了MapODataRoute配置之外,有沒有一種方法可以爲此操作添加其他MapHttpRoute配置? – t316