【问题标题】:Ignore JsonPatch specific property忽略 JsonPatch 特定属性
【发布时间】:2020-08-10 14:59:23
【问题描述】:

我目前正试图弄清楚如何阻止我的 API 用户更改/更新特定属性。从我从网上收集到的信息来看,它根本不受支持,至少 Microsoft 实现 Microsoft.AspNetCore.JsonPatch 是不支持的。除此之外,我还能够找到IObjectAdapter 接口,这将允许我在ApplyTo 方法中添加一些自定义逻辑。然而,这似乎是一种非常丑陋的方法。

显然我也可以使用 GraphQL,但是对于我真正需要它的那几次来说,这有点矫枉过正。有没有其他选择?

【问题讨论】:

  • 所以你的目的是在api中更新模型时只更新一些字段?如果是这样,可以在更新时将IsModified属性限制为一些特殊字段,请参考:stackoverflow.com/a/17570001/12884742
  • @YongqingYu 可以,但是我没有使用 EF Core。因此,这真的对我没有帮助。

标签: c# asp.net-core asp.net-core-3.1 json-patch


【解决方案1】:

在 GitHub 上进行了一番挖掘之后,我找到了 Labradoratory 的一个名为 JsonPath.Patchable 的 gem,它完全解决了我遇到的问题。虽然它确实打破了 DDD 模式,这并不能真正让我高兴,但几乎是我们能做到的最好的。

更新

我刚刚创建了一个nuget 包,它通过提供允许您传入允许更改的特定属性的扩展方法来解决这个问题。 示例:

public class DummyModel
{
    public int Id { get; set; }
    public string Value { get; set; }
}

var patchDocument = new JsonPatchDocument();
patchDocument.Replace("/Value", "newValue");

patchDocument.ApplyToWithRestrictions(dummy, "Value"); // Allows the Patch to only modify the Value property. This argument takes an array.

这个包的源代码是可用的here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多