我已经安装了 OData 库,但只是为了访问 Delta 以使 PATCH 可用于 WebAPI。它有点工作,但不适用于十进制和整数等类型。我知道这是由于 JSON 格式化程序,而不是特别是 Delta,但是否有解决方法或修复(或解决方法)可以应用于此以使其正常工作。
我知道 Delta 可以与 OData(和格式化程序)一起使用,但是当您允许资源的部分更新并且不限制可以传递的字段时,如果没有 Delta 之类的东西,使用没有 Delta 的 PATCH 就很难实现.
那里有替代方案吗?
相关问题 - 有同样的问题,int/decimal 等不要更新
更新以包含一些上下文代码
POST/PATCH/PUT 类型将被简化为特定的 DTO,以便我可以减少对象的噪音,但现在我直接使用我的模型对象,因为我只是想让它工作。
补丁路线
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:
我可以坚持字符串,只是没有其他类型。