Swashbuckle - дублированные маршруты, странное поведение

У меня есть WebApi, где мне нужны мультитенантные версии маршрутов. Это легко сделать с помощью префикса маршрута. Оба маршрута v1 и v2 имеют контроллеры A,B,C, а контроллер C в v2 имеет различную реализацию. Эта конструкция предназначена для того, чтобы сломать как можно меньше потребителей.

Swashbuckle, кажется, ведет себя странно с этой конфигурацией. Это ошибки - из-за конфликта спецификации чванства, если я не включаю следующий код:

c.MultipleApiVersions(apiDesc, version) =>
{
    controllers.Add(apiDesc);
    var controllerNamespace = apiDesc.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;

    if (controllerNamespace.ToLowerInvariant().Contains(version.ToLowerInvariant()))
    {
        return true;
    }
    return false;
},
(vc) =>
        {
            vc.Version("v1", "Quantium.Retail.Hierarchy.Services API v2");
            vc.Version("v2", "Quantium.Retail.Hierarchy.Services API v1");
        });

Это нормально и имеет смысл, однако в версию lamba передается только версия 1, поэтому в v1 отсутствуют 2 контроллера - код двух whos не изменился, кроме маршрута. Единственный контроллер в документации - это контроллер, который был переработан, чтобы иметь немного отличающиеся строки запросов и реализацию.

Это кажется довольно обычным требованием. Мне нужно два набора дублированных маршрутов, разделенных по версии (так [Route("v1/admin"] на декларации контроллера v1 и т. д. Конечно, это поддерживается?

Изменение маршрута в методе действия на любом контроллере дает правильное поведение - оба маршрута появляются в каждой версии документа. Как будто Swashbuckle рассматривает только маршрут метода действия.

0 ответов

Другие вопросы по тегам