使用NSwag命令行将securityDefinitions添加到生成的Swagger JSON文档中

时间:2019-02-10 01:12:07

标签: asp.net-web-api swagger nswag

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

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

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

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

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

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

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

目前,如果要自动化此操作,我必须运行一个脚本,该脚本在下一步构建步骤之前将必要的静态片段添加到JSON输出中,但这感觉很脏,而且我敢肯定还有更复杂的条件该解决方案无法解决的问题。

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

编辑

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

但是,对我而言,解决方案最终是编写自己的IDocumentProcessor,它不需要构造函数参数即可完成我需要做的事情。

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

0 个答案:

没有答案