2017-06-15 17 views
1

MicrosoftのOData実装では、$ filterオプションにブール式を適用してデータセットをフィルタリングできます。これは動的フィルタリング(通常はクライアントから要求されます)に適していますが、リストを列挙するためのREST APIのGETメソッドには、常に必須の基本入力パラメータが必要な場合はどうなりますか?ASP.NETのWeb APIにパラメータを渡す2 OData v4 REST API

public class RoastedCoffeeProduct 
{ 
    [Key] 
    public Guid ProductId { get; set; } 
    public string Name { get; set; } 
    public string Brand { get; set; } 
    public string StoreName { get; set; } 
    public Location StoreLocation { get; set; } 
    public decimal CurrentPrice { get; set; } 
    public int StoreStock { get; set; } 
} 

public class Location 
{ 
    public Guid LocationId { get; set; } 
    public string Country { get; set; } 
    public string Region { get; set; } 
} 

をして、REST APIに、次のGETメソッドを定義します:

/odata/RoastedCoffeeProducts/ 

期待が取得することである。例えば

、私たちのウェブAPIコントローラ上で、次のモデルを定義してみましょう所与の場所の店舗で販売可能なすべての焙煎コーヒー製品の列挙。ユースケースは次のようになります: "場所の国: 'US'、Region: 'Redmond'"ですべてのローストコーヒー製品を販売してください。これは、下記の1(一つだけを簡潔にするために示されている)のような多くのJSON項目の列挙を返す必要があります:

{ 
    "ProductId": "D6B543AE-D6A6-42C2-A4B1-70402B4B2AD1", 
    "Name": "Iperespresso capsules", 
    "Brand": "Illy", 
    "StoreName": "5 Stones Coffee Company", 
    "StoreLocation": { "LocationId": "0AB30128-0EF1-4B8C-9EC6-DCF0F27BB828", "Country": "US", "Region": "Redmond" }, 
    "CurrentPrice": "15.90", 
    "StoreStock": "4" 
} 

それでは、GETメソッドのために必要な基本入力パラメータが「国」であり、「地域」と仮定してみましょう。だから、リポジトリ内FindAllCoffeeProducts方法は、入力パラメータとして、国や地域を必要と

var productsBeingSold = storesRepository.FindAllCoffeeProducts(country, region); 

:Web APIを2コントローラがそれらを取得するための次のメソッドを呼び出しますので、彼らは常に、提供されるべきです。このメソッドが約200個のアイテムを返すと仮定しましょう。 ODataのが自動的に一致するすべてのアイテムをフィルタします

/odata/RoastedCoffeeProducts?$filter=name eq 'Nespresso capsules' 

その方法:クライアントは、その製品名「ネスプレッソカプセル」で、その後のODataフィルタリング機能は、アクションに入力したもの、のような、さらにこの200項目のデータセットをフィルタリングしたい場合200項目のデータセット。私の質問は、必要な基本入力パラメータの国と地域:OData $フィルタ句にも同様に提供する必要がありますか?私は厳密に言えばフィルタの一部ではないが、入力パラメータの一部が正しく動作するために必要なので、これは正しくないと思います。彼らはどこで提供されるべきですか?体内でおそらく? ODataフィルタリングは結果のデータセットに適用する必要がありますが、データセットは国と地域を必要な入力パラメータとして認識する必要があります。あなたが記述している何

答えて

0

は、ODataの機能で、これは特定のパラメータを取ることができ、その結果はまだ濾過し、詳細についてなどをソートすることができ、このリンクを参照してください。ここでhttps://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-actions-and-functions

は、使用して結合していない関数の例ですURLで指定されている2つのパラメータ、latlonを取る機能がGetNearestAirport呼ばれたのODataトリッピン例サービス:私はスタックオーバーフロー、感謝にサインアップした理由 http://services.odata.org/V4/TripPinServiceRW/GetNearestAirport(lat=0,lon=0)

+1

はこれがあります。 –

関連する問題