POST メソッド (WCF Data Services)
このトピックでは、WCF Data Services による POST メソッドの使用について説明します。詳細については、『Atom Publishing Protocol: データ サービス URI およびペイロード拡張』仕様ドキュメントの「2.2.7.1 挿入要求の種類」を参照してください。
以下は、POST メソッドを使用する HTTP 要求に適用されます。
WCF Data Services リソースで実行される POST メソッドには、要求 URI のリーフ ノードで識別されるエンティティ セットまたはエンティティ型のシリアル化が、要求本文内において格納されている必要があります。要求のセマンティクスは、データが新しい WCF Data Services リソースに作成されることを示します。
POST 要求の本文には、作成するエンティティのエンティティ キー プロパティの値が含まれる場合があります。そのような要求は、データ サービスに関連付けられているストレージ プロバイダーがキー値を自動的に割り当てると、応答コード "422 Unprocessable Entity" で失敗する場合があります。
POST 要求では、追加するエンティティの URI を指定することはできません。指定すると、応答コード "400 Bad Request" が返され、エンティティは追加されません。
正常に実行される POST 要求はすべて、新しいエンティティをエンティティ セットに挿入します。要求によって、応答コード "201 Created" が返され、応答には新しく作成したエンティティの URI を含む場所のヘッダーが含まれます。
要求ペイロード内の遅延コンテンツ注釈はすべて無視されます。
HTTP ヘッダー内の要求 URI が要求ペイロード内の関連 URI と一致しない場合は、要求 URI が優先され、ペイロードは要求 URI の値を含むかのように処理されます。
サービス操作の POST 要求では、DataServiceException 以外のランタイム例外のように、操作の実行中にエラーが発生した場合、応答コード "500 Internal Server Error" が返されることがあります。
POST メソッドをサポートする URI セグメント
次の例では、POST メソッドをサポートする HTTP URI 構文のセグメントを示します。各ケースには、POST 要求の説明および予測可能な結果が含まれます。
/<EntitySet>
次の URI の例は、エンティティ セットを終了要素として示しています。/Customers
要求の本文で指定された単一のエンティティ型インスタンスをセットに挿入します。
挿入するエンティティの URI は、要求本文に含めないでください。含めると、応答コード "400 Bad Request" が返されます。
要求ペイロードには、ナビゲーション プロパティまたはリンク プロパティによりこのエンティティ セットに関連するエンティティ セットの新しいコンテンツを含めることができます。このような更新の最大の深さは定義されていません。
新しく作成された最上位レベルのエンティティを既存のエンティティまたは新しく作成された別のエンティティにバインドできるようにします。
リソースのナビゲーション プロパティまたはリンク プロパティの値として、リソース 1 に既存のリソース 2 の URI のみが含まれる場合、リソース 1 はリソース 2 にバインドされます。
リソース 1 に新しい関連リソースの URI と本文が含まれる場合は、URI プロパティは挿入時には指定できないため、応答コード "400 Bad Request" が返されます。
リソース 1 に新しい関連リソース 2 の本文のみが含まれ、その URI は含まれない場合は、リソース 1 とリソース 2 が挿入され、関連付けられます。
次の例では、新しい Customer を挿入し、既存の注文 1 と 3 にバインドします。
要求 URI は /Customers で終了します。これは JSON 形式です。
{ Company Name:"Contoso" City: "Seattle" Orders : [ { __metadata: {uri:"/Orders(1)" }}, { __metadata: {uri:"/Orders(3)" }} ] }
次の例では、新しい Customer と新しい関連注文を挿入します。
要求 URI は /Customers で終了します。これは JSON 形式です。
{ Company Name:"Contoso Widgets" City: "Seattle" Orders : [ { OrderName: "NewOrder", // additional property values go here } ] }
/<NavigationProperty>
次の URI の例は、ナビゲーション プロパティを終了要素として示しています。/Customers('ALFKI')/Orders /Products(1)/Category
リレーションシップの最後に 1 よりも大きい基数がある場合、ナビゲーション プロパティとリンク プロパティは POST メソッドをサポートします。
ナビゲーション プロパティとリンク プロパティは 1 よりも大きい基数を持つリレーションシップの最後をポイントする必要があります。それ以外の場合は、応答コード "405 サポートされていないメソッド" が返されます。
これらのプロパティは、前述の /<EntitySet> と同じセマンティクスを使用しますが、新しく挿入されたリソースは、最後から 2 番目の URI セグメントで指定されたリソースにバインドされます。
/<ServiceOperationName>
次の URI の例は、サービス操作名を終了要素として示しています。/CustomersByCity?city=London
サーバーでサービス操作を呼び出します。
パラメーターは、要求本文を使用してサービス操作に渡されます。
パラメーターは application/x-www-form-urlencoding を使用してエンコードされます。
サービス操作は GET 動詞または POST 動詞を使用して呼び出すことができます。サービス操作ごとにどちらがサポートされているかは、サービスのメタデータ ドキュメントによって指定されます。POST はサービス操作ベースで有効になります。
POST メソッドは、次の種類の URI セグメントではサポートされません。
/<ComplexType>
/<EntitySet>(keyPredicate)
/<Property>
/<Property>/$value
参照
概念
MERGE メソッド (WCF Data Services)
DELETE メソッド (WCF Data Services)