4

OData ライブラリをインストールしましたが、WebAPI で PATCH を使用できるようにするために Delta にアクセスするためだけです。それはちょっと機能していますが、decimal や int などの型では機能しません。これは JSON Formatter によるものであり、具体的には Delta ではありませんが、これを機能させるために適用できる回避策または修正 (または回避策) があることを理解しています。

Delta は OData (およびフォーマッタ) で動作するように作成されていることは知っていますが、リソースの部分的な更新を許可し、渡すことができるフィールドを制限していない場合、Delta なしで PATCH を使用する Delta のようなものは実装が困難になります。 .

そこに代替手段はありますか?

関連する質問 - 同じ問題があり、int/decimal などは更新されません

プリミティブ型を追跡しない PATCH アクションの Delta<T>

コンテキストの一部のコードを含めるように更新

オブジェクトのノイズを減らすことができるように、POST/PATCH/PUT タイプは特定の DTO に単純化されますが、今のところ、動作させようとしていたので、モデル オブジェクトを直接使用しています。

PATCH ルート

    public HttpResponseMessage Patch(int id, Delta<Measurement> measurement)
    {
        var resp = new HttpResponseMessage(HttpStatusCode.OK);

        var dbMeasurement = (from n in _repo.Include("SurveyItem")
                      where n.Id == id
                      select n).SingleOrDefault();

        measurement.Patch(dbMeasurement);
        _uow.Commit();

        var measurementRep = dbMeasurement.ToRepresentation<Measurement, MeasurementRepresentation>();
        resp.Content = new ObjectContent<MeasurementRepresentation>(measurementRep, new JsonHalMediaTypeFormatter());

        return resp;
    }

フィドラーポストオプション

ヘッダー

User-Agent: Fiddler
Host: localhost:1996
Content-Length: 25
Content-Type: application/json

{
     "Value":101.00
}

200 が返されますが、何も更新されません。しかし、さらに重要なことは次のとおりです。値は 0 です。

デルタ

文字列を保持できますが、他のタイプは保持できません。

4

2 に答える 2