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 です。
文字列を保持できますが、他のタイプは保持できません。