如何通过 Code First\JsonMediaTypeFormatter 使用 Microsoft ASP.NET Web API OData 中的 Delta

2023-11-23

有什么问题吗?

我正在尝试在我的 ASP.net Web api 应用程序中启用修补程序。我正在使用代码优先实体框架。

我有以下方法头,我可以在其中设置断点并且它将命中:

[AcceptVerbs("PATCH")]
public async Task<HttpResponseMessage> Patch(long appId, long id, Delta<SimpleFormGroup> formGroup)

但是,当我调用 formGroup.Patch(entity) 时,我的实体不会发生任何更改。如果我将以下内容放入立即窗口中:

formGroup.GetChangedPropertyNames()

那么这个集合是空的,这似乎是错误的。

我尝试了什么?

我一直在参考以下示例

http://techbrij.com/http-patch-request-asp-net-webapi http://www.strathweb.com/2013/01/easy-asp-net-web-api-resource-updates-with-delta/

这似乎是 Json MediaType Formatter 不知道如何正确构建 Delta 对象的问题,但是在第二个链接 filip 似乎建议它应该在没有 oDataMediaTypeFormatter 的情况下工作。

我已经开始尝试将我的模型序列化为 EDMX 表示,然后从那里提取 CSDL,以便我可以创建一个 oDataMediaTypeFormatter,但我也在那里遇到了障碍,而且它似乎有点矫枉过正。

如果有人能阐明这一点,我们将不胜感激。如果需要更多信息,请告诉我。

EDIT:

以下是 SimpleFormGroup 的类定义:

public class SimpleFormGroup
{
    public int LastUpdate;

    public string Identifier;

    public string Title;

    public int DisplayOrder;
}

这是我发送的数据:

Content-Type: 'application/json'

{ "DisplayOrder" : "20 }

有趣的是,看起来像Delta<T>with int 成员在 JSON 中不起作用。

很遗憾,Delta<T>专为 OData 创建。如果Delta<T>似乎可以与 OData 以外的任何格式化程序一起使用,这是巧合而不是故意的。

不过好消息是,没有什么可以阻止您为 JSON 定义自己的 PATCH 格式,如果没有人编写出更适合 Json.NET 的格式,我会感到惊讶。我们可能会在未来版本的 Web API 中重新审视补丁,并尝试提出一个跨格式化程序工作的一致故事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 Code First\JsonMediaTypeFormatter 使用 Microsoft ASP.NET Web API OData 中的 Delta 的相关文章

随机推荐