Можно ли создать несколько URL документов Swagger? - PullRequest
2 голосов
/ 21 июня 2019

У меня есть веб-сайт, использующий Web API 2, и я использую Swashbuckle Swagger для создания документации API и экспорта конфигурации JSON для Azure API Management.В моем сценарии было бы идеально, если бы API могли быть сгруппированы по значению, определенному в URL документа Swagger (http://example.com/swagger/{my-api-group}).. Однако после некоторых исследований я не смог найти способ реализовать это.

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

Я пыталсячтобы узнать, могу ли я получить открытый исходный код из пакета NuGet, чтобы понять, могу ли я понять внутреннюю работу Swashbuckle. Кроме того, я знаю, что этого можно достичь с помощью «Swashbuckle.AspNetCore», но это не вариант, посколькуЯ интегрирую эту функцию в большое решение .NET Framework, которое будет непростой задачей.

1 Ответ

0 голосов
/ 23 июня 2019

Да, вы можете сделать это, вот пример:
http://swagger -net-test-multiapiversions.azurewebsites.net / чванство / щ / индекс

И исходный код для этого здесь:
https://github.com/heldersepu/Swagger-Net-Test/tree/MultiApiVersions

Ключом к этому является этот кусок в конфигурации:

// If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion".
// In this case, you must provide a lambda that tells Swagger-Net which actions should be
// included in the docs for a given API version. Like "SingleApiVersion", each call to "Version"
// returns an "Info" builder so you can provide additional metadata per API version.
//
c.MultipleApiVersions(
    (apiDesc, targetApiVersion) => targetApiVersion.Equals("default", StringComparison.InvariantCultureIgnoreCase) ||     
                                   apiDesc.Route.RouteTemplate.StartsWith(targetApiVersion, StringComparison.InvariantCultureIgnoreCase), 
                    (vc) =>
                    {
                        vc.Version("default", "Swagger_Test");
                        vc.Version("v1_0", "Swagger_Test V1_0");
                        vc.Version("v2_0", "Swagger_Test V2_0");
                    });

Другим вариантом может быть использование фильтра в последнем пользовательском интерфейсе:

...