Как я могу показать пользовательские аннотации, используемые в моих моделях в Swashbuckle? - PullRequest
1 голос
/ 09 января 2020

Мы используем аннотации JetBrains в нашем коде, чтобы определить поведение наших моделей объектов, допускающее обнуление. Я не могу увидеть их по умолчанию в пользовательском интерфейсе Swagger, реализованном с использованием Swashbuckle.AspNetCore v5.0.0-rc5 , поэтому я предполагаю, что они не поддерживаются по умолчанию. Есть ли способ добавить эту функцию?

К вашему сведению, я использую ASP. NET Core WebApi 3.1.

Например:

public class Person {
   [NotNull]
   public Id PersonId{get; set;}

   [CanBeNull]
   public Address Address {get;set;}


}

Ответы [ 2 ]

3 голосов
/ 09 января 2020

Создайте собственный фильтр схемы, например (расширите его логиками c):

public class AssignPropertyRequiredFilter : ISchemaFilter
    {
        public void Apply(Schema schema, SchemaFilterContext context)
        {
            var requiredProperties = context.SystemType.GetProperties()
                .Where(x => x.IsDefined(typeof(NotNullAttribute)))
                .Select(t => char.ToLowerInvariant(t.Name[0]) + t.Name.Substring(1));

            if (schema.Required == null)
            {
                schema.Required = new List<string>();
            }
            schema.Required = schema.Required.Union(requiredProperties).ToList();
        }
    }

, затем зарегистрируйте его

services.AddSwaggerGen(cfg => cfg.SchemaFilter<AssignPropertyRequiredFilter>());
1 голос
/ 23 января 2020

У Романа Марусика был правильный ответ, хотя я хочу уточнить, что мне нужно было сделать, чтобы он работал в моей установке.

По сути, аннотации JetBrains скрыты из-за того, что флаг условной компиляции не включен по умолчанию

[Conditional("JETBRAINS_ANNOTATIONS")]
public sealed class NotNullAttribute : Attribute

Я включил его, добавив JETBRAINS_ANNOTATIONS в свой список символов компиляции и начал видеть атрибуты. Получив это, я смог применить схему логики c Романа Марусика.

...