У меня есть проект 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 в мой spec-файл без необходимости запуска NSwag в процессе?
EDIT
По предложению @RicoSuterв комментарии ниже, вместо пост-обработки JSON, вы можете начатьс шаблоном, который содержит нужные вам биты и поставляет их в Nswag через опцию documentTemplate
для webApiToSwagger.
Однако для меня решение закончилось тем, что я написал свой собственный IDocumentProcessor
, который не требуетПараметры конструктора и делает то, что мне нужно.
До тех пор, пока / пока командный ряд не выполнит более сложный вызов процессоров, кажется, это единственный путь.