次の方法で共有


POST メソッド (ADO.NET Data Services フレームワーク)

次のリストと例では、ADO.NET Data Services による POST メソッド使用のためのプロトコルについて説明しています。「Hypertext Transfer Protocol, RFC 2616」で必要とされているその他の動作については、「一般的な HTTP 要件 (ADO.NET Data Services フレームワーク)」および「PUT、POST、および DELETE (ADO.NET Data Services フレームワーク)」で説明しています。

次のプロトコルは、POST メソッドを使用する HTTP 要求に適用します。

  • ADO.NET Data Services リソースで実行される POST メソッドには、要求 URI のリーフ ノードで識別されるエンティティ セットまたはエンティティ型のシリアル化が、要求本文内において格納されている必要があります。要求のセマンティクスは、データが新しい ADO.NET Data Services リソースに作成されることを示します。

  • POST 要求の本文には、作成するエンティティのエンティティ キー プロパティの値が含まれる場合があります。そのような要求は、データ サービスに関連付けられているストレージ プロバイダがキー値を自動的に割り当てると、応答コード "422 処理不可エンティティ" で失敗する場合があります。

  • POST 要求では、追加するエンティティの URI を指定することはできません。指定すると、応答コード "400 正しくない要求" が返され、エンティティは追加されません。

  • 正常に実行される POST 要求はすべて、新しいエンティティをエンティティ セットに挿入します。要求によって、応答コード "201 作成済み" が返され、応答には新しく作成したエンティティの URI を含む場所のヘッダーが含まれます。

  • 要求ペイロード内の遅延コンテンツ注釈はすべて無視されます。

  • HTTP ヘッダー内の要求 URI が要求ペイロード内の関連 URI と一致しない場合は、要求 URI が優先され、ペイロードは要求 URI の値を含むかのように処理されます。

  • サービス操作の POST 要求では、DataServiceException 以外のランタイム例外のように、操作の実行中にエラーが発生した場合、応答コード "500 内部サーバー エラー" が返されることがあります。

POST メソッドをサポートする型

次の例は、HTTP URI 構文の終了要素、およびそれらの要素が POST メソッドをサポートする条件を示しています。各ケースには、POST 要求の説明および予測可能な結果が含まれます。

/<EntitySet>

次の URI の例は、エンティティ セットを終了要素として示しています。

/Customers

説明 :

  • POST メソッドをサポートします。

  • 要求の本文で指定された単一のエンティティ型インスタンスをセットに挿入します。

  • 挿入するエンティティの URI は、要求本文に含めないでください。含めると、応答コード "400 正しくない要求" が返されます。

  • 要求ペイロードには、ナビゲーション プロパティまたはリンク プロパティによりこのエンティティ セットに関連するエンティティ セットの新しいコンテンツを含めることができます。このような更新の最大の深さは定義されていません。

  • 新しく作成された最上位レベルのエンティティを既存のエンティティまたは新しく作成された別のエンティティにバインドできるようにします。

    • リソースのナビゲーション プロパティまたはリンク プロパティの値として、リソース 1 に既存のリソース 2 の URI のみが含まれる場合、リソース 1 はリソース 2 にバインドされます。

    • リソース 1 に新しい関連リソースの URI と本文が含まれる場合は、URI プロパティは挿入時には指定できないため、応答コード "400 正しくない要求" が返されます。

    • リソース 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
}
]
}

[!メモ]

エンティティ型が継承階層の一部ではない場合は、JSON シリアル化ルール (ADO.NET Data Services フレームワーク) で説明した __metadata オブジェクトの型パラメータは省略可能です。型を指定しない場合は、エンティティ セットの基本型が使用されます。型が継承階層の一部である場合は、型パラメータを指定する必要があります。

/EntitySet(keyPredicate)

次の URI の例は、キー述語を終了要素として示しています。

/Customers('ALFKI')

説明 :

POST メソッドはサポートされていません。

次の URI の例は、ナビゲーション プロパティを終了要素として示しています。

/Customers('ALFKI')/Orders
/Products(1)/Category

説明 :

  • リレーションシップの最後に 1 よりも大きい基数がある場合、ナビゲーション プロパティとリンク プロパティは POST メソッドをサポートします。

  • ナビゲーション プロパティとリンク プロパティは 1 よりも大きい基数を持つリレーションシップの最後をポイントする必要があります。それ以外の場合は、応答コード "405 サポートされていないメソッド" が返されます。

  • これらのプロパティは、前述の /<EntitySet> と同じセマンティクスを使用しますが、新しく挿入されたリソースは、最後から 2 番目の URI セグメントで指定されたリソースにバインドされます。

/<ComplexType>

次の URI の例は、複合型を終了要素として示しています。

/Customers('ALFKI’)/Address

説明 :

  • POST メソッドはサポートされていません。

/<Property>

次の URI の例は、プロパティを終了要素として示しています。

/Customers('ALFKI’)/FirstName

説明 :

  • POST メソッドはサポートされていません。

<Property>/$value

次の URI の例は、プロパティ値を終了要素として示しています。

/Customers('ALFKI’)/FirstName/$value

説明 :

  • POST メソッドはサポートされていません。

/<ServiceOperationName>

次の URI の例は、サービス操作名を終了要素として示しています。

/CustomersByCity?city=London

説明 :

  • POST メソッドをサポートします。

  • サーバーでサービス操作を呼び出します。

  • パラメータは、要求本文を使用してサービス操作に渡されます。

  • パラメータは application/x-www-form-urlencoding を使用してエンコードされます。

  • サービス操作は GET 動詞または POST 動詞を使用して呼び出すことができます。サービス操作ごとにどちらがサポートされているかは、サービスのメタデータ ドキュメントによって指定されます。POST はサービス操作ベースで有効になります。

参照

概念

PUT メソッド (ADO.NET Data Services フレームワーク)
DELETE メソッド (ADO.NET Data Services フレームワーク)