Добавление securityDefinitions в сгенерированный документ Swagger JSON с помощью командной строки NSwag - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть проект 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, который не требуетПараметры конструктора и делает то, что мне нужно.

До тех пор, пока / пока командный ряд не выполнит более сложный вызов процессоров, кажется, это единственный путь.

...