Перенесите код с кода ядра 2.0 на 3.1, затем файл swagger api versing не работает - PullRequest
0 голосов
/ 06 марта 2020

Невозможно неявно преобразовать тип

'System.Collections.Generi c .Dictionary' в 'Microsoft.OpenApi.Models.OpenApiPaths'

явное преобразование существует (вам не хватает актеров?)

public class ReplaceVersionWithExactValueInPath : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        swaggerDoc.Paths = swaggerDoc.Paths
            .ToDictionary(
                path => path.Key.Replace("v{version}", swaggerDoc.Info.Version),
                path => path.Value
            );
    }
}

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Похоже, OpenApiDocument.Path - не словарь. Вы не можете использовать swaggerDoc.Paths = swaggerDoc.Paths.ToDictionary() назначение

попробовать с новым OpenApiPath объектом и Add() методом

var oap = new OpenApiPaths();
foreach (var p in swaggerDoc.Paths)
    oap.Add(p.Key.Replace("v{version}", swaggerDoc.Info.Version),
        p.Value);
swaggerDoc.Paths = oap;
0 голосов
/ 19 марта 2020

Тип Microsoft.OpenApi.Models.OpenApiPaths наследуется от OpenApiExtensibleDictionary<OpenApiPathItem>, а затем наследуется от Dictionary<string, OpenApiPathItem>.

Вы можете ' swaggerDoc.Paths = swaggerDoc.Paths.ToDictionary(), но вы можете создать новый OpenApiPaths из IDictionary<string, OpenApiPathItem>

var paths = new OpenApiPaths(swaggerDoc
              .Paths
              .ToDictionary(
                  path => path.Key.Replace("v{version}", swaggerDoc.Info.Version),
                  path => path.Value)
            );
swaggerDoc.Paths = paths;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...