我试图反对接受Delta的Web API补丁方法。我的实体有一个导航属性,是一个集合。域模型是微不足道的,我有一个团队(实体)和一组成员(导航属性)。
我直接使用HttpClient而不是OData客户端。
我遇到的问题是,当我发送有效负载=团队的补丁请求时,当我在我的有效负载中包含导航属性集合时,我的控制器中反序列化的Delta为空。
例如(忽略缺少的引号,输入}:
{姓名:Foo} - >成功序列化到Delta。 {姓名:Foo,成员:[]} - >无法序列化,Delta无效。
支持吗?我在网上找不到具体的文档,关于你是否可以在补丁上提供导航属性作为整个集合(不是寻找合并支持,只是想要完全替换集合。)
我还尝试调整我的客户端以直接发送Delta有效负载,但默认的JsonMediaTypeFormatter无法将其序列化为有效的请求体(总是生成空的Json),并且ODataMediaTypeFormatter抛出异常,说它无法写入输入Delta,虽然我已经用每个ODataPayloadKind初始化它。
我确定我做错了什么或遗漏了一些基本的东西,假设使用带有HttpClient的Delta +补丁并不具有挑战性。
答案 0 :(得分:0)
对于OData spec,它说:
即您无法将导航属性放在 Patch 请求内容中。
来自Web API OData,它有these codes和these codes。这意味着它不允许修补导航属性表单实体。
但是,您可以按照以下步骤拍摄目标:
您可以参考my simple test project。