C# .NetCore Swagger ISchemaFilter 注入示例值、描述

目录

[1. 创建自定义Schema过滤器](#1. 创建自定义Schema过滤器)

[2. 注册自定义Schema过滤器](#2. 注册自定义Schema过滤器)

[3. 配置具体的属性或类型(可选)](#3. 配置具体的属性或类型(可选))

[4. 运行并查看结果](#4. 运行并查看结果)


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

在使用Swagger(特别是通过Swashbuckle库在.NET Core/ASP.NET Core项目中)时,我们经常需要为模型的属性提供示例值或描述,以便更好地展示API文档。这可以通过实现ISchemaFilter接口来完成,该接口允许我们在Swagger生成过程中自定义模型属性。

以下是如何实现ISchemaFilter接口来注入示例值和描述的步骤:

1. 创建自定义Schema过滤器

首先,创建一个类来实现ISchemaFilter接口。在这个类中,你可以定义如何修改模型的Schema。

using Swashbuckle.AspNetCore.SwaggerGen;

using Microsoft.OpenApi.Models;

using System.Collections.Generic;

using System.Linq;

public class ExampleSchemaFilter : ISchemaFilter

{

public void Apply(OpenApiSchema schema, SchemaFilterContext context)

{

// 你可以在这里添加逻辑来设置默认的示例值和描述

// 比如,为所有字符串类型的属性添加示例值和描述

if (context.Type == typeof(string))

{

schema.Example = "示例字符串"; // 设置示例值

schema.Description = "这是一个示例字符串描述"; // 设置描述

}

// 你可以根据需要为其他类型或属性设置示例值和描述

}

}

2. 注册自定义Schema过滤器

在Startup.cs或Program.cs文件中注册你的自定义Schema过滤器。确保在添加Swagger服务时加入你的过滤器。

对于Startup.cs (ASP.NET Core 3.x 或更早版本)

public void ConfigureServices(IServiceCollection services)

{

services.AddSwaggerGen(c =>

{

c.SchemaFilter<ExampleSchemaFilter>(); // 注册自定义Schema过滤器

});

}

对于Program.cs (ASP.NET Core 5.x 或更新版本)

builder.Services.AddSwaggerGen(c =>

{

c.SchemaFilter<ExampleSchemaFilter>(); // 注册自定义Schema过滤器

});

3. 配置具体的属性或类型(可选)

如果你想为特定的属性或类型设置示例值和描述,可以在Apply方法中添加条件判断。例如,只对某个特定类型或属性名设置:

public void Apply(OpenApiSchema schema, SchemaFilterContext context)

{

if (context.Type == typeof(MyCustomType)) // 针对特定类型

{

schema.Example = new MyCustomType { /* 设置示例值 */ }; // 设置示例对象

schema.Description = "这是一个自定义类型的描述"; // 设置描述

}

else if (context.PropertyName == "SpecificProperty") // 针对特定属性名

{

schema.Example = "特定属性的示例值"; // 设置示例值

schema.Description = "这是一个特定属性的描述"; // 设置描述

}

}

4. 运行并查看结果

运行你的应用程序并访问Swagger UI,你应该能看到模型属性上的示例值和描述。这有助于API消费者更好地理解如何使用你的API。

通过上述步骤,你可以灵活地为你的Swagger文档中的模型属性添加示例值和描述,从而提高API文档的可用性和易用性。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
zhanghaha13146 小时前
C# 系列教程_7 判断语句(分支)保姆级精讲
开发语言·c#
zhanghaha13147 小时前
C# 系列教程_8 循环语句 保姆级精讲(面向新手)
开发语言·c#
rockey62716 小时前
AScript之LINQ扩展
c#·.net·script·动态脚本
1-1=021 小时前
C# 委托与事件
开发语言·c#
1-1=01 天前
C# 特性(Attribute)
c#·.net·.netcore
淡海水2 天前
10-01-互操作-C#与C++边界的内存管理
unity·c#·游戏引擎·.netcore·gc
WarPigs2 天前
C#把byte[]以十六进制打印,带分割符
c#
暴走约伯2 天前
【VFX工具链源码拆解 04】拯救丢失的绑定:Timeline 一键克隆与层级相对路径重映射算法
unity·c#·游戏引擎·硬件工程
1-1=02 天前
C# 反射
c#·.net·.netcore
步步为营DotNet2 天前
.NET 可观测性选型:Metrics、ActivitySource、EventSource 到底该用哪个
c#·.net·metrics·可观测性