Используйте MultipleApiVersions в Swagger с управлением версиями атрибутов

Можно ли использовать MultipleApiVersions в пользовательском интерфейсе Swagger/Swashbuckle при использовании маршрутизации атрибутов?

В частности, я реализовал управление версиями:

using System.Web.Http;

namespace RESTServices.Controllers.v1
{
    [Route("api/v1/Test")]
    public class TestV1Controller : ApiController
    { ... }

Версия 2 будет находиться в пространстве имен v2. В контроллере с именем TestV2Controller. В маршруте будет v2.

Можно ли передать лямбду, которая позволит это сделать? Я нашел образец лямбды в Интернете, который скомпилировался, но затем Swagger полностью перестал работать. Не удалось попасть в точки останова или увидеть Swagger в браузере.


person Hoppe    schedule 11.06.2015    source источник


Ответы (2)


Swagger поддерживает несколько версий. Настройте URL-адрес таким образом, чтобы Swagger мог правильно указать версию.

httpConfiguration
.EnableSwagger(c =>
    {
        c.MultipleApiVersions(
            (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
            (vc) =>
            {
                vc.Version("v2", "Swashbuckle Dummy API V2");
                vc.Version("v1", "Swashbuckle Dummy API V1");
            });
    });
.EnableSwaggerUi(c =>
    {
        c.EnableDiscoveryUrlSelector();
    });


    private static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
    {
        return apiDesc.ActionDescriptor.ControllerDescriptor.ControllerType.FullName.Contains($"{targetApiVersion}.");
    }

Использованная литература:

person Rohit Vipin Mathews    schedule 28.06.2019
comment
Этот код неполный, что такое ResolveVersionSupportByRouteConstraint? - person Anth12; 25.11.2019
comment
github.com/domaindrivendev/Swashbuckle/ капля/мастер/ - person Rohit Vipin Mathews; 27.01.2020

person    schedule
comment
Я думаю, что второе появление Swashbuckle Dummy API V2 выше должно заканчиваться на V1, а не на V2? - person Greg Trevellick; 30.06.2017
comment
Я не смог найти надлежащий справочный документ для этого требования. Ваш ответ работает как шарм. Спасибо! - person Martin; 17.10.2017