使用Postman发送PATCH到Asp.net Core webapi时出错

2023-12-01

我有一个模型,

public class Order
{
    public Guid Id { get; set; }
    public IEnumerable<string> ItemIds { get; set; }
    public string Currency { get; set; }
}

和一个存储库,

public interface IOrderRepository
{
    IEnumerable<Order> Get();
    Order Get(Guid id);
    void Add(Order order);
    void Update(Guid id, Order order);
    // other irrelevant code has been deleted for simplicity
}

public class MemoryOrderRepository : IOrderRepository
{
    private readonly IList<Order> _orders = new List<Order>();
    public IEnumerable<Order> Get() => _orders;

    public Order Get(Guid id) => _orders.FirstOrDefault(o => o.Id == id);
    public void Add(Order order) => _orders.Add(order);

    public void Update(Guid id, Order order)
    {
        var target = _orders.FirstOrDefault(o => o.Id == id);
        if (target != null) target.ItemIds = order.ItemIds;
    }
    // other irrelevant code has been deleted for simplicity
}

已注册于Startup.cs如下。

    public void ConfigureServices(IServiceCollection services) =>
        services.AddSingleton<IOrderRepository, MemoryOrderRepository>()
                .AddControllers()
                .AddNewtonsoftJson();

其他相关的 nuget 软件包已安装如下。

<PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.1" />

测试控制器如下。

[Route("api/[controller]")]
[ApiController]
public class OrderController : ControllerBase
{
    private readonly IOrderRepository repo;

    public OrderController(IOrderRepository repo)
    {
        this.repo = repo;
    }

    [HttpGet]
    public IActionResult Get() => Ok(repo.Get());

    [HttpGet("{id:guid}")]
    public IActionResult Get(Guid id) => Ok(repo.Get(id));

    [HttpPost]
    public IActionResult Post(Order order)
    {
        Order target = new Order()
        {
            Id = Guid.NewGuid(),
            ItemIds = order.ItemIds
        };

        repo.Add(target);

        return CreatedAtAction(nameof(Get), new { id = target.Id }, null);
    }

    [HttpPatch("{id:guid}")]
    public IActionResult Patch(Guid id, JsonPatchDocument<Order> order)
    {
        Order target = repo.Get(id);
        if (target == null)
            return NotFound(new { Message = $"Item with id {id} does not exist." });


        order.ApplyTo(target);
        repo.Update(id, target);
        return Ok();
    }

    // other irrelevant code is deleted for simplicity
}

使用 Postman,我成功创建了一个新订单,首先将 POST 动词发送到服务器,然后通过发送 GET 动词来确认结果,如下所示。

enter image description here

enter image description here

Question

我尝试使用以下内容部分更新订单,但失败了。

enter image description here

错误信息是

JSON 补丁文档格式错误,无法解析。

出了什么问题以及如何解决?

代替

{
    "ItemIds": ["xyz","123"]
}

我也尝试过

{
    "op":"replace",
    "path":"/ItemIds",
    "value": ["xyz","123"]
}

两者都没有帮助。


根据docs对于 json patch,您需要传递一组操作而不是单个对象,如下所示

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

使用Postman发送PATCH到Asp.net Core webapi时出错 的相关文章

  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 从导入同时保留按模块的访问权限

    标题有点难以理解 但我的问题很简单 我有一个程序需要采取sqrt 某事 但这是我唯一需要的math 为了获取单个功能而导入整个模块似乎有点浪费 我可以说from math import sqrt 但是之后sqrt 将被添加到我的程序的主命名
  • Excel:如何将包含某些文本的行复制到另一个工作表(VBA)

    我希望使用一个能够搜索所述工作表中的列的宏 如果找到某些文本 在我的例子中是 失败 一词 复制整个行数据 格式并将其粘贴到另一个工作表中 工作表就我而言 为 4 以及包含该特定文本的任何其他行 我一直在使用这段代码 但它只复制粘贴一行然后停
  • 使用 imshow 在 pyqt4 中嵌入 matplotlib

    我正在尝试做一些非常类似的事情this 不同之处在于我想使用 imshow 而不是plot 上面代码的相关部分 class MyMplCanvas FigureCanvas Ultimately this is a QWidget as w
  • 第一个列表项的 css 选择器

    我有以下 html 结构 ul li class arrow boundElement style height 40px test li ul
  • get_dummies 并一起数

    我有一个数据框 其中包含不同的 案例 作为行 其中有一个 id 和一个类别 df DataFrame id 1122 3344 5566 5566 3344 5566 1122 3344 category health transport
  • 使用 SolidColorBrush 画笔填充列表

    我正在尝试使用 WP7 1 中可用的所有预定义 SolidColorBrush 填充列表 但我在通过代码执行此操作时遇到困难 我已经使用一个简短的测试颜色列表手动完成了此操作 效果很好 但是有一百多种不同的预定义颜色 我知道必须有一个正确的
  • 未指定端点的永久重定向 s3

    我正在尝试 s3 但遇到了权限问题 我认为 Output AWS S3 PermanentRedirect in CkeditorController create The bucket you are attempting to acce
  • 推力计数发生[重复]

    这个问题在这里已经有答案了 可能的重复 计算cuda数组中数字的出现次数 有没有办法使用 Thrust 或 CUDA 来计算数组中重复项的出现次数 例如 如果我有一个设备向量 11 11 9 1 3 11 1 2 9 1 11 我应该得到
  • jquery ui 以模式方式弹出 YouTube 视频

    有没有办法使用 jQueryUI 以模式方式弹出 YouTube 视频 这是我的 YouTube 代码
  • 目录枚举以跳过文件夹

    我有一段可爱的代码 它对我来说非常出色 只需获取多次搜索等所需的所有文件 public static IEnumerable
  • MIFARE Classic:如何找到良好的访问字节值

    我的目标是仅进行 KEY A 身份验证并禁用 Key B 用于存储数据的空间 我阅读了这些文档 http www nxp com documents data sheet MF1S503x pdf http dangerousthings
  • GetContentHeight() 无法正常工作

    我正在尝试检索网络视图内容的高度 它包含一个 html 字符串 问题是 getContentHeight 总是返回相同的值 392 无论 html 字符串有多长 这个问题已经让我抓狂了 让我猜测一下 您的内容不是从网络或文件系统加载的 而是
  • 从字符串获取 DbSet

    ADO NET 用户首次尝试 EF 我正在尝试从表名字符串中获取一个表 比我想象的还要难 基本上我在这里 var tableName Name Entities Measure measureType var table Activator
  • 如何将 JSON api 日期与 FSCalendar 进行比较并在表格视图中显示事件?

    我在日历中显示了事件点 但无法根据表格视图中的月份显示相同的事件 我想显示这些事件 例如如果我们更改月份并且表格视图数据事件应该更改 我很困惑如何做到这一点 我正在使用 FSCalendar 来显示 dot 和 tableview 等事件
  • 如何重新安装 NetBeans?所有可用组件(包和运行时)都已安装,如何继续?

    NetBeans 重新安装出现问题 第一个工作正常 所有可用组件均已安装 单击 取消 退出安装程序 没办法继续下去了 之前 我使用 全部 完整下载选项 215 MB 下载并安装了 NetBeans IDE 8 1 的窗口版本 其中包含 Ne
  • iText - 可点击的图像应该打开 MS Word 附件

    如何使图像可点击以便打开附加的 ms word 文档 我这里有一些 PDF 其中有一些图像 ms word 图标 图标下方有 ms word 文件名 通过单击图像打开附加的 ms word 文档 我想知道如何使用 iText 库执行此操作
  • 为什么有些人在循环宏的子句中使用关键字?

    它能解决任何问题吗 根据 PCL 的第一个脚注 如果不是关键字 它会将符号保留在当前包中 由于所有关键字都被保留在关键字包中 因此可以防止多个符号被保留在不同的包中 但还有其他优点吗 它会产生什么问题 我猜一定有问题 因为这不是普遍的惯例
  • 极坐标图中的箭头

    我试图绘制串联 R L C 电路中电阻器 电容器和电感器两端电压的相量 我已经完成了所有的计算 我可以用正常的方式得到一个像样的图ax plot theta r 我想让相量向量看起来像箭头 我一直在尝试使用ax arrow 0 0 thet
  • 为什么需要 Lambda 函数将值传递给 @onclick 调用的方法?

    我是 Blazor 以及一般的 Web 开发人员 的新手 我跟着Microsoft 的 Blazor Web 应用程序待办事项列表教程 在完成上述教程后 我想进一步在每个列表元素旁边添加按钮以将它们从列表中删除 这是我为实现这一目标而编写的
  • 使用Postman发送PATCH到Asp.net Core webapi时出错

    我有一个模型 public class Order public Guid Id get set public IEnumerable