入力を受け取り、オブジェクトのリストを返すカスタム メソッドの作成方法については、 http://odata.github.io/RESTier/#03-01-Operationsを参照しています。
これが私のカスタムメソッドです
[HttpGet]
[ODataRoute("Locations/PointLoc.Data.GetLocationsByMarketId()")]
public IHttpActionResult GetLocationsByMarketId()
{
var database = new Database();
var locations = database.Locations.GetAllLocationsByMarket(1);
return Ok(locations);
}
そして、これが私のDbDomainに設定する方法です
protected EdmModel OnModelExtending(EdmModel model)
{
var ns = model.DeclaredNamespaces.First();
var location = model.FindDeclaredType(ns + "." + "Location");
var locations = EdmCoreModel.GetCollection(location.GetEdmTypeReference(isNullable: false));
var getLocationsWithMarketId = new EdmFunction(ns, "GetLocationsWithMarketId", locations, true, null, false);
getLocationsWithMarketId.AddParameter("bindingParameter", locations);
model.AddElement(getLocationsWithMarketId);
return model;
}
それを機能させることはできません。次のような OData Uri エラーが発生し続ける
コントローラー 'PointLoc' のアクション 'GetLocationsByMarketId' の 'Locations/PointLoc.Data.GetLocationsByMarketId()' は、有効な OData パス テンプレートではありません。リクエスト URI が無効です。セグメント 'Locations' はコレクションを参照するため、これはリクエスト URI の最後のセグメントである必要があります。または、その後にバインドできる関数またはアクションが続く必要があります。それ以外の場合は、すべての中間セグメントが単一のリソースを参照する必要があります。
「/Locations/GetLocationsByMarketId」を介して Odata にアクセスしたかった。どうやってするの?