首页 > 解决方案 > 使用 NSwag 命令行向生成的 Swagger JSON 文档添加 securityDefinitions

问题描述

我有一个 Web.Api/OWIN 项目,我正在尝试为其生成 Swagger 规范。

我试图避免将太多的 NSwag 集成到我的项目中;该项目是一个嵌入式 API,我想避免在进程中运行规范文件或 Swagger UI。我仍然必须使用 NSwag 属性来解决无法直接从代码或 XML 注释中解决的问题。

相反,我尝试使用 NSwag 命令行工具生成规范文件,作为构建过程的一部分,我可以将其作为单独的文档进行后处理(最终集成到 DocFX 文档中)。

到目前为止,我已经设法使用nswag webapi2swagger命令来生成我需要的 JSON,但是,它缺少 securityDefinition 部分。

我的端点具有授权属性,我已设法通过该属性使用OperationSecurityScopeProcessor处理器包括在内。SwaggerOperationProcessor

这些授权属性详细信息已成功添加到规范中,但是,生成的规范中缺少 securityDefinition 属性被认为是“无效的”,并且 Swagger 工具不会在文档中呈现授权角色。

SecurityDefinitionAppender在通过 运行进程内时,我使用文档处理器获得了所需的结果UseSwagger,但是,无法为命令行工具指定它,并尝试在 nswag.json 或 .nswag 配置文件中引用它(通过documentProcessorTypes属性) 失败,因为SecurityDefinitionAppender没有无参数构造函数(SwaggerGeneratorCommandBase.cs似乎没有提供一种机制来支持 documentProcessorTypes 的构造函数参数)。

目前,如果我想自动执行此操作,我必须运行一个脚本,在下一个构建步骤之前将必要的静态片段添加到 JSON 输出,但这只是感觉很脏,而且我敢肯定会有更复杂的问题出现这个解决方案不起作用。

当需要构造函数参数时,有没有办法在 NSwag 命令行工具中引用操作和文档处理器,或者,是否有另一种方法可以将 securityDefinition 添加到我的规范文件中,而无需在进程中运行 NSwag?

编辑

根据下面评论中的@RicoSuter 建议,您可以从包含所需位的模板开始,并通过 webApiToSwaggerdocumentTemplate选项提供给 Nswag,而不是对 JSON 进行后处理。

然而,对我来说,解决方案最终是编写我自己的IDocumentProcessor,不需要构造函数参数并做我需要它做的事情。

直到/除非命令行运行器支持更复杂的处理器调用,这似乎是唯一的方法。

标签: asp.net-web-apiswaggernswag

解决方案


推荐阅读