2017-02-14 1 views
0

OData標準を使用すると、新しいコレクションを送信してコレクションを置き換えることはできますか? シナリオ: personオブジェクトには、リストAddressオブジェクトが含まれています。 Addressコレクションを新しいコレクションに置き換えたいと考えています。 PUT者(1)/アドレス [{ "街": "X"、 "国": "US"}、{ "街": "Y"、 "国": "US"}]コレクションプロパティを置き換えるOData PUT

答えて

0

これはデフォルトのルーティングテンプレートがキー部分の後のセグメントを期待しないので、(ODATAv3の場合は)少なくともデフォルトでは不可能です。

しかし、達成したいと思うようなODATAアクションを追加することができます。あなたのアクション定義は、次のようになり可能性:

var action = builder.Entity<Person>() 
    .Action("Addresses") 
    .Returns<bool>(); 
action.Parameter<Collection<CityCountryPair>>("data"); 

タイプCityCountryPairを変更したいあなたの特性を含む正規DTOだろう。この型がOdataのEntitySetとして登録されていることを確認するか、プリミティブ型のみのプレーンマップ/ディクショナリを使用してください。 ODATAアクションに

実際の呼び出しは、その後、次のようになります。

POST http://www.example.com/api/YourEndpoint/Persons(42)/Addresses 
Content-Type: application/json 

{ 
    "data" : 
    [ 
     { "city" : "Berne" , "country": "CH" }, 
     { "city" : "Y" , "country": "CH" } 
    ] 
}  

あなたは、より複雑なデータ型を送信したい場合は、まだ顧客JSONデシリアライザに頼ると、デフォルトの1または使用を上書きすることができます結局カスタムモデルのバインダー。

+0

ありがとうございました。 ODATAアクションは、私が望むものを得るのを助けました。 –

+0

それを聞いてうれしいです。明確化が必要なあなたの質問に関して他に何かありますか?さもなければ私の答えを「受け入れられた」答えとすることができます。 –