示例请求正文中 JsonPatchDocument 的 Swagger 意外 API PATCH 操作文档

2024-01-02

我正在制作 Core 3.1 Web API 并使用杰森补丁 https://learn.microsoft.com/en-us/aspnet/core/web-api/jsonpatch?view=aspnetcore-3.1创建 PATCH 操作。我有一个名为Patch其中有一个JsonPatchDocument范围。这是该操作的签名:

[HttpPatch("{id}")]
public ActionResult<FileRecordDto> Patch(int id, [FromBody] JsonPatchDocument<FileRecordQueryParams> patchDoc)

据我了解,该参数需要接收以下结构的 JSON 数据,我已使用该操作成功测试了该数据:

[
  {
    "op": "operationName",
    "path": "/propertyName",
    "value": "newPropertyValue"
  }
]

However, the action's documentation generated by Swagger https://swagger.io/ has a different structure: enter image description here

我不熟悉这个结构,甚至"value"其中缺少属性,这是JsonPatchDocument对象有。每个修补的例子replace我见过的操作有第一个结构。

为什么 Swagger 会生成替代结构JsonPatchDocumentPATCH 端点的请求正文中的对象?我该如何解决?

The NuGet package installed for Swagger: Swashbuckle.AspNetCore v5.6.3


Swashbuckle.AspNetCore这种类型不能正常工作JsonPatchDocument<UpdateModel>,这并不代表预期的补丁请求文档。

您需要自定义文档过滤器来修改生成的规范。

public class JsonPatchDocumentFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        var schemas = swaggerDoc.Components.Schemas.ToList();
        foreach (var item in schemas)
        {
            if (item.Key.StartsWith("Operation") || item.Key.StartsWith("JsonPatchDocument"))
                swaggerDoc.Components.Schemas.Remove(item.Key);
        }

        swaggerDoc.Components.Schemas.Add("Operation", new OpenApiSchema
        {
            Type = "object",
            Properties = new Dictionary<string, OpenApiSchema>
            {
                {"op", new OpenApiSchema{ Type = "string" } },
                {"value", new OpenApiSchema{ Type = "string"} },
                {"path", new OpenApiSchema{ Type = "string" } }
            }
        });

        swaggerDoc.Components.Schemas.Add("JsonPatchDocument", new OpenApiSchema
        {
            Type = "array",
            Items = new OpenApiSchema
            {
                Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = "Operation" }
            },
            Description = "Array of operations to perform"
        });

        foreach (var path in swaggerDoc.Paths.SelectMany(p => p.Value.Operations)
        .Where(p => p.Key == Microsoft.OpenApi.Models.OperationType.Patch))
        {
            foreach (var item in path.Value.RequestBody.Content.Where(c => c.Key != "application/json-patch+json"))
                path.Value.RequestBody.Content.Remove(item.Key);
            var response = path.Value.RequestBody.Content.Single(c => c.Key == "application/json-patch+json");
            response.Value.Schema = new OpenApiSchema
            {
                Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = "JsonPatchDocument" }
            };
        }
    }
}

注册过滤器:

services.AddSwaggerGen(c => c.DocumentFilter<JsonPatchDocumentFilter>());

Result:

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

示例请求正文中 JsonPatchDocument 的 Swagger 意外 API PATCH 操作文档 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 如何获取jenkins管道插件作业的工作区(WorkflowRun对象java API)

    在java API中 我可以从Run java对象访问工作空间路径 直到今天 所有对象都是 hudson model AbstractBuild 的实例 hudson model AbstractBuild getWorkspace hud
  • 内存屏障/栅栏的开销

    我目前正在编写 C 代码 并在代码中使用大量内存屏障 栅栏 我知道 MB 告诉编译器和硬件不要重新排序围绕它的写入 读取 但我不知道这个操作对于处理器在运行时有多复杂 我的问题是 这种屏障的运行时开销是多少 我用谷歌没有找到任何有用的答案
  • pymongo:删除重复项(映射减少?)

    我确实有一个包含多个集合的数据库 总共约 1500 万个文档 文档如下所示 简化 Text blabla ID 101 Text Whuppppyyy ID 102 Text Abrakadabraaa ID 103 Text olalal
  • Gorm 一对多搜索

    有以下问题 我有 Bookmaker 和 Users 域类 一个博彩公司有许多用户 class Bookmaker static hasMany users User 并且 User 域类不包含对 Bookmaker 的引用 我的目标是创建
  • 来自 JSON 字符串的打字稿“enum”

    有没有办法让 TypeScript 枚举与 JSON 中的字符串兼容 例如 enum Type NEW OLD interface Thing type Type let thing Thing JSON parse type NEW al
  • Python 3 中 str.translate 的自定义表

    如果我运行这段代码 s translate str maketrans as dfg 1234 qw 我会得到 ValueError string keys in translate table must be of length 1 有没
  • 获取控制台句柄

    如何获取外部应用程序的控制台句柄 我有一个程序作为控制台运行 我有一个第二个程序将调用 GetConsoleScreenBufferInfo 但为此我需要第一个程序的控制台句柄 给定第一个程序的 HWND 是否有可能我可以获得它的控制台句柄
  • 使用 withColumnRenamed 重命名多列

    我想使用 Spark withColumnRenamed 函数更改两列的名称 当然 我可以写 data sqlContext createDataFrame 1 2 3 4 x1 x2 data data withColumnRenamed
  • 如何使用 codeigniter 锁定表?

    我必须在模型中运行这个 sql 例程 this gt db gt query LOCK TABLE orders WRITE this gt db gt query TRUNCATE TABLE orders this gt db gt q
  • 从 master 分支构建到 gh-pages 分支

    我想做的事 我正在使用github 我有两个分支机构 主页面和 gh 页面 我的 master 分支上有一个 unity3d 项目 当我运行它时 它将生成一个网页 我想在 gh pages 分支上显示网页的内容 我认为这意味着我必须在存储库
  • 如何通过区分类型来隔离枚举?

    下面的代码定义了两个枚举 class Insect BEE 0x00 WASP 0x01 BUMBLEBEE 0x02 class Breakfast HAM 0x00 EGGS 0x01 PANCAKES 0x02 b Insect WA
  • 如何根据 R 中其他行和列中的值来填充数据框

    假设我有一个如下所示的数据框 ID T X Y Z 1 1 A A NA 1 2 B A NA 1 3 B B NA 1 4 B A NA 2 1 A B NA 2 2 A A NA 2 3 B A NA 2 4 A B NA 3 1 B
  • Java 中埃拉托斯特尼的并行筛法

    我正在尝试并行实现埃拉托斯特尼筛法 我创建了一个布尔列表 其中填充了给定大小的 true 值 每当找到素数时 该素数的所有倍数都会在布尔列表中标记为 false 我尝试使该算法并行的方法是启动一个新线程 同时仍然过滤初始素数 例如 该算法以
  • 使用 Sapera 拍摄图像并将数据复制到矢量

    我如何拍摄图像萨佩拉SDK https www teledynedalsa com en products imaging vision software sapera lt 并传输图像数据SapBuffer对象到向量 要使用 Sapera
  • 如何将字典赋予字典值[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个有趣的问题 有谁知道我们是否可以为字典的价值提供另一本字典 例子 var dict1 new Dictionary
  • Python JSON TypeError 列表索引必须是整数或切片,而不是 str

    我目前正在尝试从发布请求响应中解析一些数据 并且不断收到此错误 TypeError 列表索引必须是整数或切片 而不是 str Python代码 import requests import json count 0 params var1
  • Android 中的 Webview 建立内存

    在我的混合 Android 应用程序中 ListView项目点击我正在加载WebView通过通过WebViewActivity 以及要在其中显示的 url 用户可以通过单击后退按钮返回到先前的视图 但点击 3 4 后发生的事情ListVie
  • 使用 espresso 解锁模拟器屏幕

    我正在开发我的第一个 Android 应用程序 并且正在设置 CI 服务器 我的浓缩咖啡测试在我的机器上运行良好 但 travis 出现以下错误 java lang RuntimeException 等待视图层次结构的根获得窗口焦点并且在超
  • 如何将字节数组转换为位图图像?

    在这里 我附加了将位图转换为字节数组的代码 现在我必须重新生成位图以在 android 图像视图中显示 在下面的代码中 mRawBitmapData 是字节 Araay 这里的代码是为转换后的图像创建字节数组 所以现在我必须从这个字节数组重
  • 示例请求正文中 JsonPatchDocument 的 Swagger 意外 API PATCH 操作文档

    我正在制作 Core 3 1 Web API 并使用杰森补丁 https learn microsoft com en us aspnet core web api jsonpatch view aspnetcore 3 1创建 PATCH