从生成的swagger中的组件及其响应中的关联$refs中删除元数据

hjzp0vay  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(131)

我们使用Swashbuckle.AspNetCore包来实现swagger。我们有很多调用返回多态对象,如SortEntry或VersionedObject,并且在swagger中生成的组件似乎包含一堆关于这些对象的Meta数据,如下所示:

"Data.SortEntry`1[[Data.Search.Enums.DetailsSortType, Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"

字符串
我不想太过纠结,但这只是我们的流程造成的一个问题,在我们的流程中,我们使用生成的swagger来验证API契约。因此,这个元数据会导致问题,因为它包含一个版本属性,该属性每次都会更改,并使我们的构建失败。
我的问题是,有没有一种方法可以抑制正在生成的元数据?在以前的Swashbuckle版本(<3.0)中,无论出于何种原因,这都不是问题。
编辑:下面是一个例子,当我们使用Swashbuckle.AspNetCore 2.x并生成swagger json v2.0时,其中一个组件看起来像什么:

SortEntry[DetailsSortType]


我们正在使用Swashbuckle.AspNetCore@5.6.3并生成OpenAPI3.0 swagger。

5w9g7ksd

5w9g7ksd1#

在看了一些其他的问题之后,我最终发现了这个:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1803
我能够提取最初在SwashBuckle.AspNetCore4.x.x中可用的TypeContext.cs代码,并使用它实现自定义模式ID。效果很好。

jhdbpxl9

jhdbpxl92#

你可以将这个文件复制到你的项目中,它是一个类型扩展,为类返回一个“友好”的名称:
https://github.com/domaindrivendev/Swashbuckle.WebApi/blob/5489aca0d2dd7946f5569341f621f581720d4634/Swashbuckle.Core/Swagger/TypeExtensions.cs
类型扩展允许你附加和调用一个类的新方法,你甚至不需要原始的类代码或者重新编译等等。在底层,类型扩展是一个静态函数,它接受定义它的类作为参数之一。
要将其与Swashbuckle & Swagger一起使用,只需将这一行添加到您的StartupBase。

services.AddSwaggerGen(a => a.CustomSchemaIds(i => i.FriendlyId()));

字符串

相关问题