Удаление части путей URL при создании файлов swagger JSON с использованием SwashBuckle для версионных API - PullRequest
1 голос
/ 19 июня 2020

У меня есть. NET Core Web API с управлением версиями. В настоящее время существует 2 версии, и рабочие пути в 2 файлах swagger выглядят примерно так:

/api/v1/Versioning/List (v1 swagger)
/api/v2/Versioning/List (v2 swagger)

В Azure DevOps есть конвейер сборки, который генерирует 2 файла swagger с помощью PowerShell:

`dotnet swagger tofile --output pathToV1Json MyApplication.dll v1`

и

`dotnet swagger tofile --output pathToV2Json MyApplication.dll v2`

и сохраняет их в артефакте. В конвейере выпуска я использую задачу управления Create or Update Versioned API API для создания / обновления моего API в Azure API Management, используя эти сгенерированные файлы swagger.

Пока все хорошо, все работает, как ожидалось . Но на этапе выпуска к URL-адресу добавляется еще одна часть версии, как и следовало ожидать. Итак, в моих последних операциях API в Управлении API URL-адрес выглядит примерно так:

.../v1/api/v1/Versioning/List (v1 swagger)
.../v2/api/v2/Versioning/List (v2 swagger)

Я пытался отредактировать сгенерированные пути операций в файлах swagger, используя IDocumentFilter, и это работает, но также ломает интерфейс Swagger. Есть ли способ изменить эти рабочие пути, но только при создании фактического файла Swagger?

Итак, в моем IDocumentFilter я мог бы иметь что-то вроде этого:

    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        var openApiPaths = new OpenApiPaths();
        foreach (var path in swaggerDoc.Paths)
        {
            if ([generating actual swagger file])
            {
                openApiPaths.Add(path.Key.Replace("/v1", ""), path.Value);
            }
            else
            {
                openApiPaths.Add(path.Key, path.Value);
            }
        }
        swaggerDoc.Paths = openApiPaths;
    }
...