swagger добавить документ и операцию для универсального контроллера - PullRequest
0 голосов
/ 13 декабря 2018

я работаю над webapi с плагинами.Я хочу обновить документацию Swagger при добавлении плагина.Я могу справиться с этим, когда я не использую версию.Все методы добавлены в документацию по чванству.

, но когда api включил apiversion, генерация нового документа swagger не удалась.Он возвращает 404.

нужно ли мне что-либо для работы с версиями и получения функций динамического контроллера ...

 private string AddSwaggerVersionDocument(PluginMetadata metadata)
        {

            var version = metadata.Version.ToApiVersion();

            if (SwaggerElements.GeneratorOptions.SwaggerGeneratorOptions.SwaggerDocs.ContainsKey(version) == false)
            {
                SwaggerElements.GeneratorOptions.SwaggerDoc(version, new Info
                {

                    Title = "webapi API",
                    Version = $"{version}",
                    Description = "Web API demo",
                    TermsOfService = "None",
                    Contact = new Contact
                    {
                        Name = "Frans van Ek",
                        Email = string.Empty,
                        Url = "https://fransvanek.nl"
                    },
                    License = new License
                    {
                        Name = "Use under LICX",
                        Url = "https://fransvanek.nl"
                    }
                });

                 SwaggerElements.UIOptions.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"My API : {version}");
            }
            return version;
        } 

1 Ответ

0 голосов
/ 03 января 2019

Теперь я вижу.Вы используете свой собственный механизм управления версиями и генерируете документы Swagger по требованию.Swashbuckle ожидает, что все будет определено заранее.Это разумно, поскольку поддерживаемые версии должны быть детерминированными в начале приложения.Если ваше приложение является полностью динамическим, то ваше текущее решение будет работать, но может варьироваться между вызовами.Если плагины обнаружены и загружены заранее, вы можете зарегистрировать IConfigureOptions<SwaggerGenOptions>, который настраивает Swashbuckle с информацией о вашем плагине.Что-то вроде:

public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions>
{
    readonly IApiDescriptionGroupCollectionProvider provider;

    public ConfigureSwaggerOptions(
        IApiDescriptionGroupCollectionProvider  provider ) => this.provider = provider;

    public void Configure( SwaggerGenOptions options )
    {
        // TODO: configure swashbuckler with plug-in information
    }
}

И затем зарегистрируйте его в сервисном контейнере с помощью:

services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();

Надеюсь, это поможет

...