如何让Swagger识别并标记模型的[Key]主键属性?
让Swagger自动识别实体类的[Key]注解并标注主键(.NET 6 + Visual Studio 2022)
Swagger默认确实不会识别EF Core的[Key]特性来标记主键,要实现自动识别,只需要自定义一个Schema过滤器即可,步骤如下:
1. 创建自定义Schema过滤器类
新建一个类实现ISchemaFilter,在方法里扫描实体类的属性,识别带[Key]注解的字段并修改Swagger的属性描述:
using Microsoft.EntityFrameworkCore; using Swashbuckle.AspNetCore.SwaggerGen; using System.Reflection; public class KeySchemaFilter : ISchemaFilter { public void Apply(Microsoft.OpenApi.Models.OpenApiSchema schema, SchemaFilterContext context) { if (context.Type == null) return; // 筛选出带有[Key]特性的属性 var keyProperties = context.Type.GetProperties() .Where(p => p.GetCustomAttribute<KeyAttribute>() != null); foreach (var prop in keyProperties) { if (schema.Properties.TryGetValue(prop.Name, out var propertySchema)) { // 在属性描述后追加“(主键)”标识 propertySchema.Description = string.IsNullOrEmpty(propertySchema.Description) ? "(主键)" : $"{propertySchema.Description}(主键)"; } } } }
2. 注册过滤器到Swagger配置
在Program.cs的Swagger服务配置中,添加这个自定义过滤器:
builder.Services.AddSwaggerGen(c => { // 你的其他Swagger配置(比如文档信息、注释路径等) c.SchemaFilter<KeySchemaFilter>(); });
3. 验证效果
启动项目后打开Swagger文档页面,查看对应GET接口的返回模型,带[Key]注解的属性会自动显示“(主键)”标识,不用再手动写三斜杠注释来标注。
如果需要更个性化的展示(比如特殊样式标记),可以修改过滤器中对propertySchema的处理逻辑,比如添加自定义扩展字段,但修改描述是最直接适配默认Swagger UI的方案。
内容的提问来源于stack exchange,提问作者JustLooking
相关产品推荐
相关产品推荐

