时间:2019-04-01 标签:c#swagger openapi erronous refs when nested classes

Posted

技术标签:

【中文标题】时间:2019-04-01 标签:c#swagger openapi erronous refs when nested classes【英文标题】:c# swagger openapi erronous refs when nested classes 【发布时间】:2020-04-29 09:41:58 【问题描述】:

在将我的 OpenAPI 上传到 Azure API 管理时,我的 API 的默认 swagger 生成会出现错误。使用 Swagger Editor 进行测试,发现如下错误:

“$ref 值必须是符合 RFC3986 的百分比编码 URI”。

看来我的嵌套类数据类型转换为:

$ref: >-
              #/components/schemas/Namespace.Class+NestedClass

我猜是“+”号需要删除或编码。 关于如何实现这一点的任何建议?

【问题讨论】:

Azure 给你什么错误?虽然 OAS3 确实不允许在模式名称中使用 +,但可能存在与 Azure's OAS import limitations 相关的其他问题。另外,您使用什么工具来生成 API 定义 - Swashbuckle、Swagger-Net 等等? Azure 错误:解析错误:组件“模式”中的键“Namespace.Class+NestedClass”必须匹配正则表达式“^[a-zA-Z0-9\.\ -_]+$'。 [#/成分]。 Swagger 编辑器错误:components.schemas.Namepsace.Class.properties.NestesClass.items.$ref 的语义错误 $ref 值必须是符合 RFC3986 的百分比编码 URI。 API 定义由 Swashbuckle.AspNetCore 生成。 这是一个 Swashbuckle 问题,它会生成带有不受支持字符的架构名称(在这种情况下 - +)。在github.com/domaindrivendev/Swashbuckle.AspNetCore/issues 提出问题 【参考方案1】:

我在尝试使用 api 管理发布服务时遇到了类似的问题。

解析错误:组件“模式”中的键“Namespace.Class+NestedClass”必须匹配正则表达式“^[a-zA-Z0-9.-_]+$”。 [#/组件]

在我的情况下,使用自定义架构 ID 并替换导致错误的字符解决了问题:

services.AddSwaggerGen(options =>

    options.CustomSchemaIds(type => type.FullName.Replace("+", "_"));
);

【讨论】:

以上是关于时间:2019-04-01 标签:c#swagger openapi erronous refs when nested classes的主要内容,如果未能解决你的问题,请参考以下文章

时间:2019-04-01 标签:c#com object can't get ref object values

时间:2019-04-01 标签:c#mongodb database collection find

时间:2019-04-01 标签:c#dllimport parameters shift

时间:2019-04-01 标签:c#swagger openapi erronous refs when nested classes

[Intern][2019.04.01]Linux 学习心得

数据库mysql实操