首页 > 解决方案 > 如何在 Swashbuckle 中显示我的模型中使用的自定义注释?

问题描述

我们在代码中使用 JetBrains 注释来定义对象模型的可空性行为。默认情况下,我无法在使用Swashbuckle.AspNetCore v5.0.0-rc5实现的 Swagger UI 中看到这些,所以我假设默认情况下不支持这些。有没有办法添加这个功能?

仅供参考,我使用的是 ASP.NET Core WebApi 3.1。

例如:

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

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


}

标签: c#asp.net-coreswaggerswashbuckle

解决方案


创建一个自定义模式过滤器,例如(使用您的逻辑对其进行扩展):

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>());

推荐阅读