Как настроить Swashbuckle так, чтобы он не включал шаблон / сущность / схему в документацию - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь создать фильтр для Swashbuckle, чтобы исключить в документации API модели / сущности / схемы проекта, сохраняя контроллеры. Используемая технология - Swashbuckle.AspNetCore v3.0.0 / Swagger UI v3.17.1. Я уже нашел способы опустить определенный метод в контроллере, но я хотел опустить модели в документации. Я обнаружил проблему, похожую на мою, в том числе скрытие только свойств.

Следуйте коду фильтра

public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
    if (!(context.ApiModel is ApiObject))
    {
        return;
    }

    var model = context as ApiObject;

    if (schema?.Properties == null || model?.ApiProperties == null)
    {
        return;
    }

    var excludedProperties = model.Type
        .GetProperties()
        .Where(
            t => t.GetCustomAttribute<SwaggerExcludeAttribute>() != null
        );

    var excludedSchemaProperties = model.ApiProperties
        .Where(
            ap => excludedProperties.Any(
                pi => pi.Name == ap.MemberInfo.Name
            )
        );

    foreach (var propertyToExclude in excludedSchemaProperties)
    {
         schema.Properties.Remove(propertyToExclude.ApiName);
    }
}

цитата: Как настроить Swashbuckle для игнорирования свойства на модели

Есть ли у кого-нибудь предложения скрыть из документации только модели / объекты / схемы, а не только их атрибуты? Как изображение ниже.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

По крайней мере для меня я должен был сделать что-то вроде:

   internal class SwaggerSchemaFilter : ISchemaFilter
        {
            public void Apply(OpenApiSchema schema, SchemaFilterContext context)
            {
                var keys = new System.Collections.Generic.List<string>();
                var prefix = "My.Prefix";
                foreach(var key in context.SchemaRepository.Schemas.Keys)
                {
                   if (key.StartsWith(prefix))
                    {
                        keys.Add(key);
                    }
                }
                foreach(var key in keys)
                {
                    context.SchemaRepository.Schemas.Remove(key);
                }
            }
        }
0 голосов
/ 11 февраля 2020

Установите DefaultModelsExpandDepth в -1 в вашей конфигурации Swashbuckle / Swagger:

app.UseSwaggerUI(c =>
{
    ...
    c.DefaultModelsExpandDepth(-1);
}
...