gpt4 book ai didi

c# - 使用带有 JSON 格式化程序的 Delta 实现 PATCH

转载 作者:行者123 更新时间:2023-11-30 12:29:35 26 4
gpt4 key购买 nike

我已经安装了 OData 库,但只是为了访问 Delta 以使 PATCH 可用于 WebAPI。它有点工作,但不适用于 decimal 和 int 等类型。我知道这是由于 JSON 格式化程序,而不是特定的 Delta,但是否有可以应用于此的解决方法或修复程序(或解决方法)以使其正常工作。

我知道 Delta 是为与 OData(和格式化程序)一起工作而设计的,但是如果没有像 Delta 这样使用 PATCH 而没有 Delta 的东西,当您允许部分更新资源并且不限制需要更新的字段时,实现起来会很困难可以通过。

还有其他选择吗?

相关问题 - 有同样的问题,int/decimal 等不更新

Delta<T> in PATCH actions not tracking primitive types

已更新为包含一些上下文代码

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;
}

FIDDLER 帖子选项

标题

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

正文

{
"Value":101.00
}

返回 200 但没有更新任何内容。但更能说明问题的是以下内容,值为 0:

Delta

我可以持久化字符串,但不能持久化其他类型。

最佳答案

由于评论有点失控,我开始回答这个问题。

我试过你的代码,发现了一些奇怪的事情:

首先,您没有在 Patch 方法上使用覆盖。如果没有这个,请求甚至不应该到达,因为它无法解决。

其次,假设您的“值”字段是小数类型,我不能像您那样发送小数。 IE。在一个只有 101.00 值的 JSON 中。这是我在自己的应用程序中也注意到的事情,我的解决方案是将其作为字符串发送,并将其封装在引号中 ("Value": "101.00")。它仍然以这种方式解析为小数,我猜这同样适用于 double 和 float 。

最后,为了真正用尽所有选项,您能否将这行代码包含在您的 patch 方法的顶部?

if (!ModelState.IsValid)
{
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
}

通过这种方式,您将获得正确的 400 BadRequest 响应以及错误响应。

尽管如此,在包含上述所有内容的情况下,我仍然可以修补非字符串。 Visual Studio 已经开始唠叨我的第一点,如果你不覆盖它提到隐藏方法的方法。我希望其中之一能解决您的问题。如果没有,我会更新我的答案,希望有更多的解决方案。

关于c# - 使用带有 JSON 格式化程序的 Delta<T> 实现 PATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com