使用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时出错 的相关文章

随机推荐

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

    标题有点难以理解 但我的问题很简单 我有一个程序需要采取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