资讯动态

C# .NetCore Swagger ISchemaFilter 应用场景

发布时间:2026/10/16 12:01:04 来源:尧图企业网站定制
目录核心定义与用途实现与注册步骤常见应用场景注意事项如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。ISchemaFilter 是 Swashbuckle (Swagger for ASP.NET Core) 提供的接口用于在生成 OpenAPI 文档时‌拦截并自定义每个数据模型Schema的结构与元数据‌ 。‌‌核心定义与用途‌接口位置‌Swashbuckle.AspNetCore.SwaggerGen.ISchemaFilter‌核心方法‌void Apply(OpenApiSchema schema, SchemaFilterContext context)‌主要作用‌在自动反射生成模型定义后动态修改属性如隐藏字段、修改类型、注入示例值/描述、处理枚举/特殊类型等。‌适用场景‌全局统一格式化如 Long 转 String 防精度丢失、基于特性Attribute动态隐藏属性、补充业务元数据、自定义枚举显示等 。‌‌实现与注册步骤‌创建过滤器类‌实现 ISchemaFilter 接口在 Apply 方法中通过 context.Type 获取当前类型操作 schema.Properties 或 schema 本身。‌注册过滤器‌在 Program.cs 或 Startup.cs 的 AddSwaggerGen 配置中调用 .SchemaFilterYourFilterClass()。‌‌// 1. 定义过滤器public class CustomSchemaFilter : ISchemaFilter{public void Apply(OpenApiSchema schema, SchemaFilterContext context){// 示例将所有字符串类型默认值设为空字符串if (schema.Type string schema.Default null){schema.Default new OpenApiString();}// 示例根据特性隐藏特定属性// foreach (var prop in context.Type.GetProperties()) { ... }}}// 2. 注册 (ASP.NET Core Minimal Hosting)builder.Services.AddSwaggerGen(options {options.SchemaFilterCustomSchemaFilter();});常见应用场景‌类型转换‌将 long/long? 类型强制转为 string 类型解决前端精度丢失问题。‌动态隐藏‌结合自定义 Attribute如 [SwaggerExclude]在 Schema 生成阶段移除敏感或不需展示的字段 。‌元数据增强‌为枚举添加描述、为特定字段注入 example、pattern 或 readOnly 标记 。‌默认值注入‌统一为特定命名属性如 pageIndex设置默认值 。‌‌注意事项‌执行时机‌在模型反射生成 Schema ‌之后‌、文档组装‌之前‌执行仅影响模型定义不影响操作Operation参数描述后者需 IParameterFilter。‌上下文获取‌SchemaFilterContext 提供 Type当前模型类型、MemberInfo若是属性过滤、SchemaRepository 等信息需利用反射判断具体处理逻辑 。‌多过滤器顺序‌若注册多个 ISchemaFilter按注册顺序依次执行后执行的过滤器可覆盖前者的修改 。‌‌如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑