1

Simple.OData.Client を使用しており、エンティティの特定のプロパティを更新したいと考えています。

C# で次のクラスがあるとします。

[DataContract(Name = "entity")]
public class MyEntity
{
        [DataMember(Name = "propertyA")]
        public string MyPropertyA { get; set; }

        [DataMember(Name = "propertyB")]
        public string MyPropertyB { get; set; }
}

次のように propertyA を更新しようとしています。

await _simpleOdataClient.For<MyEntity>()
                  .Key(key)
                  .Set(new MyEntity
                  {
                    MyPropertyA = "test"
                  })
                  .UpdateEntryAsync();

これを例に取りました: https://github.com/object/Simple.OData.Client/wiki/Updating-entries

私の問題は、propertyA=test だけでなく propertyB=null の PUT リクエストも送信することです。変更したくないプロパティに null 値を設定しようとします。

特定のプロパティのみを更新し、OData 要求で HTTP PATCH を送信することは可能ですか?

4

3 に答える 3

1

PUT の代わりに PATCH を使用する必要があります。

HTTP 標準は次のように述べています。

特定の表現の PUT が成功すると、同じターゲット リソースに対する後続の GET によって、同等の表現が 200 (OK) 応答で送信されることが示唆されます。

したがって、リクエスト内で PUT を発行すると、後続の GET はas をMyPropertyA含むエンティティを返す必要があります。MyPropertyBnull

主に、OData v4 標準は次のように述べています。

PUT をサポートするサービスは、構造プロパティのすべての値をリクエスト本文で指定された値に置き換える必要があります。参照制約内で依存プロパティとして定義されていない、キー以外の更新可能な構造プロパティが欠落している場合は、デフォルト値に設定する必要があります。

クライアントが を送信しないようにすることはできるかもしれませんがMyPropertyB、適切な OData サーバーはそれを、値をデフォルト(null) に設定する要求として解釈する必要があります。

于 2021-07-25T16:24:15.877 に答える