Swagger 5.0 - IDocumentFilter (от SwaggerDocument до OpenApiDocument) настраиваемые «Определения» - PullRequest
1 голос
/ 13 февраля 2020

Мы находимся в процессе миграции приложения с. NET Core 2.1 на 3.1, для которого нам необходимо также обновить swagger с 4.X до 5.X . С помощью swagger 4.x мы смогли удалить некоторые свойства, помеченные атрибутом speci c, например:

public class SwaggerIgnoreFilter : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
    {
        var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(i => i.GetTypes()).ToList();

        foreach (var definition in swaggerDoc?.Definitions)
        {
            var type = allTypes.FirstOrDefault(x => x.Name == definition.Key);
            if (type != null)
            {
                var properties = type.GetProperties();
                foreach (var prop in properties.ToList())
                {
                    var ignoreAttribute = prop.GetCustomAttribute(typeof(SwaggerIgnoreAttribute), false);

                    if (ignoreAttribute != null)
                    {
                        definition.Value.Properties.Remove(prop.Name);
                    }
                }
            }
        }
    }
}

Проблема в том, что в swagger 5.0 изменился IDocumentFilter и у нас есть OpenApiDocument вместо SwaggerDocument, который забрал свойство Definitions , и мы не можем понять, как скрыть определенные свойства от страниц сваггера. Любая помощь / предложение / ссылка была бы отличной. Спасибо.

1 Ответ

2 голосов
/ 13 февраля 2020

Теперь вы можете использовать swaggerDoc.Components.Schemas

public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
    var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(i => i.GetTypes()).ToList();

    foreach (var definition in swaggerDoc.Components.Schemas)
    {
        var type = allTypes.FirstOrDefault(x => x.Name == definition.Key);
        if (type != null)
        {
            var properties = type.GetProperties();
            foreach (var prop in properties.ToList())
            {
                var ignoreAttribute = prop.GetCustomAttribute(typeof(SwaggerIgnoreAttribute), false);

                if (ignoreAttribute != null)
                {
                    definition.Value.Properties.Remove(prop.Name);
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...