首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swashbuckle中的自定义SchemaFilter以显示带有描述的枚举,但更改输入值

Swashbuckle是一个用于生成和展示API文档的开源工具,它与ASP.NET Core Web API框架集成。自定义SchemaFilter是Swashbuckle提供的一种扩展机制,用于自定义API文档中枚举类型的展示方式。

枚举类型是一种特殊的数据类型,它包含一组预定义的常量值。在API文档中,通常需要展示枚举类型的取值范围和描述信息,以便开发者能够理解和正确使用API。

通过自定义SchemaFilter,我们可以实现在API文档中显示带有描述的枚举。具体步骤如下:

  1. 创建一个实现了ISchemaFilter接口的自定义枚举SchemaFilter类。ISchemaFilter接口定义了一个Apply方法,用于修改Swagger中的架构(Schema)对象。
  2. 在Apply方法中,判断当前架构对象是否为枚举类型。如果是枚举类型,则获取枚举的描述信息,并将其添加到架构对象的描述字段中。
  3. 在Startup.cs文件中的ConfigureServices方法中,注册自定义的枚举SchemaFilter。可以使用AddSwaggerGen方法来配置Swashbuckle生成API文档的选项。

下面是一个示例代码:

代码语言:txt
复制
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Linq;
using System.Reflection;

public class EnumSchemaFilter : ISchemaFilter
{
    public void Apply(Schema schema, SchemaFilterContext context)
    {
        if (context.Type.IsEnum)
        {
            var enumValues = Enum.GetValues(context.Type);

            schema.Description += $"Possible values: {string.Join(", ", enumValues)}. ";
            
            foreach (var enumValue in enumValues)
            {
                var memberInfo = context.Type.GetMember(enumValue.ToString()).FirstOrDefault();
                var enumDescription = memberInfo?.GetCustomAttribute<DescriptionAttribute>()?.Description;
                
                if (!string.IsNullOrEmpty(enumDescription))
                {
                    schema.Description += $"{enumValue}: {enumDescription}. ";
                }
            }
        }
    }
}

在上述示例中,我们通过遍历枚举类型的取值,获取每个取值的描述信息,并将其添加到架构对象的描述字段中。

要使用自定义的枚举SchemaFilter,只需在Startup.cs文件中的ConfigureServices方法中注册它:

代码语言:txt
复制
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    c.SchemaFilter<EnumSchemaFilter>();
});

这样,当使用Swashbuckle生成API文档时,枚举类型的描述信息将会显示在文档中。

推荐的腾讯云相关产品:腾讯云API网关(API Gateway)。腾讯云API网关是一种全托管的API服务,可帮助开发者更好地管理和发布API,并提供了丰富的功能和工具来简化API的开发和维护工作。您可以通过以下链接了解更多关于腾讯云API网关的信息:腾讯云API网关

请注意,以上答案仅供参考,具体实现方式可能因不同的技术栈和版本而有所差异。在实际应用中,建议查阅相关文档和资料,以确保正确使用Swashbuckle和自定义SchemaFilter。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

开局一张图,然后开始编,一些基本asp.net core东西就不再赘述,本文只对Swashbuckle.AspNetCore几个使用要点进行描述。 ?...安装nuget包:Swashbuckle.AspNetCore,本文使用版本1.1.0,.net core版本2.0+ 编辑解决方案添加(或者在vs项目属性->生成->勾选生成xml文档文件...token/版本js代码 ApiVersions为枚举,配置api版本,以期通过CustomRoute特性标记解决历史api问题。...IHostingEnvironment env) { app.UseSwagger(); app.UseSwaggerUI(c => { //ApiVersions为自定义版本枚举...如何自动将token保存并赋值 使用js生成了文本框到.authorize-wrapper,将保存到了本地存储,然后会根据接口版本将版本号参数进行复制 $(function () {

1.9K10

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成

来渲染该文件,非常美观形式将你 API 文档,展现给你团队或者客户。...它解释 Swagger JSON 构建描述 Web API 功能自定义丰富体验。 它包括针对公共方法内置测试工具。...Swashbuckle包安装 选择工具=>NuGet包管理器=>程序包管理控制台 输入以下命令安装包:Install-Package Swashbuckle.AspNetCore -Version 6.2.3...wagger 提供了为对象模型进行归档和自定义 UI 匹配你主题选项。...Swagger UI 显示版本信息如下所示:  API Swagger添加描述 在 Program.cs 中注入XML相关描述: 注意:将 Swagger 配置为使用按照上述说明生成 XML 文件

1.2K20

ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

它提供了为 API 生成 C# 和 TypeScript 客户端代码方法。 下面Swashbuckle.AspNetCore为例为大家进行展示 Swashbuckle由哪些组成部分呢?...它解释 Swagger JSON 构建描述 Web API 功能自定义丰富体验。 它包括针对公共方法内置测试工具。 如何使用vs2017安装Swashbuckle呢?...从“管理 NuGet 程序包”对话框: 右键单击“解决方案资源管理器” > “管理 NuGet 包”项目 将“包源”设置为“nuget.org” 在搜索框输入Swashbuckle.AspNetCore...生成描述终结点文档显示如下json格式。 ? 可在 http://localhost:/swagger 找到 Swagger UI。...在出现参数文本框输入参数,如下图所示输入参数2 点击执行按钮,会出现下面所示格式化后Response,如下图所示 ?

3.2K10

webapi文档描述-swagger

为了解决这个问题,特意在博客园搜索了一下api接口文档生成文章,引起我注意有两种方案。...那是因为Swagger将资源文件都嵌入到dll中了,我们常用资源文件都是以内容方式放在项目中,我们也可以嵌入资源方式引入到项目中 这也是上面我将SwaggerUI文件夹删除,页面也能正常出来原因..., "Show/Hide": "显示/隐藏", "List Operations": "显示操作", "Expand Operations": "展开操作", "Raw": "原始", "can't parse...方法_setControllerSummary通过读取ControllerDesc属性设置了控制器描述,至此项目可以无忧使用接口描述文档。...我们可以在Global.asax.cs Application_Start替换掉系统自带ApiExploer服务,使用我们自己自定义服务。

1.1K10

Unity基础教程系列(七)——可配置形状(Variety of Randomness)

不是,但是也没有令人信服理由对其进行保护。当直接与类外枚举一起使用时,例如对于自定义编辑器,可能需要将其公开。...它们应该是公共可读仅由属性本身设置即可。 ? 添加具有最小和最大作为参数构造方法,初始化属性。为了使范围合理,请强制最大不能小于最小。 ?...Unity将负责检测更改并为我们支持撤消和重做。 ? 接下来,我们需要知道要显示滑块限制,该限制存储在属性。我们可以通过PropertyDrawerattribute属性访问它。...这可能不是问题,因为颜色不需要精确,但是它使得无法检查要复制一个滑块用于其他地方。因此,我们也为最小和最大添加常规输入字段。...首先使用EditorGUI.FloatField绘制一个最小float输入字段,不带标签。它返回可能更改。之后是滑块,然后是最大输入字段。 ? ?

2.6K30

Excel编程周末速成班第18课:使用用户窗体创建自定义对话框

要将控件放置在窗体上,在工具箱单击该控件图标;然后将图标拖到窗体上放置控件。 单击窗体上已经存在控件将其选中。选定控件显示带有8个方形手柄较粗点画边框,如图18-2所示。 ?...要更改属性,单击其名称。然后,进行更改方式取决于特定属性: 对于枚举属性(可以采用一组预定义任何一个),使用右列下拉列表选择。...对于True/False属性,双击在True和False之间切换。 对于具有文本或数字属性,单击右列,然后输入或编辑该属性。 对于更复杂属性,右列会显示一个带有省略号(...)按钮。...一个示例是创建用户窗体向用户显示有关程序使用指令,然后希望在用户处理另一窗体时保持该用户窗体显示状态。 窗体方法 UserForm对象具有一些方法。表18-3描述了你可能需要内容。 ?...该程序将显示一个带有输入文本消息框,显示VBA代码如何从用户窗体检索数据。 这是一个简单演示。

10.8K30

Swift基础 结构和类

类支持额外功能以增加复杂性为代价。作为一般准则,更喜欢结构,因为它们更容易推理,并在适当或必要时使用类。在实践,这意味着您定义大多数自定义数据类型将是结构和枚举。...} 上面的示例定义了一个名为Resolution新结构,描述基于像素显示分辨率。这种结构有两个存储属性,称为width和height。存储属性是捆绑并作为结构或类一部分存储常量或变量。...上面的示例还定义了一个名为VideoMode新类,描述视频显示特定视频模式。该类有四个变量存储属性。...初始化器在初始化中进行了更详细描述。 结构和枚举类型 类型是一种类型,其在分配给变量或常量时,或当传递给函数时被复制。 在前几章,您实际上一直在广泛使用类型。...当您定义自己自定义结构和类时,您有责任决定什么符合两个相等条件。定义自己实现==和过程!=运算符在等效运算符描述

6100

深入了解对象属性标志以及描述

属性标志以及描述符 正如我们所知,对象可以存储属性。 到目前为止,属性对我们来说只是一个简单“键-”对。但对象属性实际上是一个更灵活和强大东西。...当我们“通常方式”创建一个属性时,它们都是正确。但我们也可以随时改变它们。 首先,让我们看看如何获得这些标志。...propertyName: 属性名称。 返回是一个所谓“属性描述符”对象:它包含和所有标记。...不能更改访问器属性get/set(如果没有,可以分配它们)。 “configurable:false”思想是为了防止属性标记更改和删除,同时允许更改。...另一个区别是for…in会忽略符号属性,Object.getOwnPropertyDescriptors返回所有属性描述符,包括符号描述符。 全局密封对象 属性描述符在单个属性级别上工作。

47030

Unity基础教程系列(新)(三)——数学表面(Sculpting with Numbers)

这个例子,视图应该显示MultiWave。 ? 这样,即使在播放模式下,也可以通过视图检视器控制功能。 在播放模式下更改分辨率滑块是否有效果?...2.3 枚举 整数滑块有效,0表示波动函数等并不明显。如果我们有一个包含函数名称下拉列表,将会更加清楚。可以使用枚举来实现。 可以通过定义枚举类型来创建枚举。...当前,我们将X维度用作函数空间输入。Y尺寸用于显示输出。留下Z作为第二空间维度用于输入。在输入上加上Z会将我们线升级为正方形网格。...4.1 三维函数 如果我们函数是输出3D位置而不是1D,则可以使用它们来创建任意表面。例如 ? 描述了XZ平面。而 ? 描述了Y平面。...调整我们函数委托类型支持这种新方法。唯一需要做更改是将其浮点返回类型替换为Vector3,还要重命名其参数。 ? 现在,我们需要相应地调整函数方法。将U和V直接用于X和Z。

1.4K30

ASP.NET Core 实战:构建带有版本控制 API 接口

在 Startup 类,存在着 ConfigureServices 和 Configure 这两个方法,在 ConfigureServices 方法,我们将自定义服务通过依赖注入方式添加到 IServiceCollection...我们使用 API 文档目的,就是为了让前端知道请求方法地址是什么,需要传递什么参数,而现在,并没有办法显示出我们对于参数以及方法注释,通过查看 Swashbuckle.AspNetCore github...如果你和我一样强迫症的话,可以把 1591 这个错误添加到上面的禁止显示警告,这样就可以不再显示这个警告了。 ?   ...2、带有版本控制 API 接口实现   在请求 API Url 中标明版本号,我不知道你第一时间看到这个实现方式,会想到什么,对于我来说,直接在路由信息添加版本号不就可以了。。。...重新运行我们项目,可以发现,文档显示 Url 地址也已经正确了,自此,我们创建带有版本控制 API 也就完成了。

1.2K30

基础渲染系列(九)——复合材质

我们也为自己着色器创建一个自定义检查器,模仿标准着色器。 ? ?...在我们着色器调整细节纹理显示名称,匹配标准着色器。 ? ? (次要贴图) 细节法线贴图工作原理与主法线贴图相同。奇怪是,标准着色器GUI不会隐藏细节凹凸比例。...在本教程中一直使用它们作为提示,帮助大家检查着色器代码。 也将相应变量添加到我们包含文件。 ? 创建一个函数,器作为参数来检索片段金属。...除了在没有纹理情况下显示之外,它作用类似于凹凸缩放。 ? ? (隐藏滑动条) 2.4 自定义着色器关键字 金属滑块被隐藏,因为标准着色器使用贴图或统一。他们没有相乘。...也可以按自己喜好命名自定义关键字,惯例是使用大写单词并带有下划线。现在,我们使用_METALLIC_MAP。 自定义关键字在哪里定义?

3.3K10

听GPT 讲Rust源代码--srctools(8)

例如,如果一个代码行被标记为忽略,则该处理器会将其状态更改为不忽略。 更新代码:一旦所有ignore标记状态都被切换,该处理器会更新输入代码,并返回更新后代码作为输出。...Either: 枚举类型,表示一个要么是T类型,要么是U类型枚举变体。该枚举类型用于在不同场景中表示两种可能,类似于RustOption类型,这里只表示两个可能选项。...struct T: 这是一个带有命名字段结构体,与第一个结构体T$0相同功能,具有显式命名字段。 struct Inner;: 这是一个空结构体。它可能是作为其他结构体或枚举字段存在。...struct Wrap: 这是一个带有命名字段结构体,与上述定义Wrap$0相同功能,具有显式命名字段。...fn label(&self):提供了操作标签,用于显示在IDE提供建议列表

22210

C# 特性 System.ComponentModel 命名空间属性方法大全,System.ComponentModel 命名空间特性

EnumDataTypeAttribute 启用 .NET Framework 枚举映射到数据列。 FileExtensionsAttribute 验证文件扩展名。...Required [Required] 指定数据字段是必需,用户输入时不能为空。...ParenthesizePropertyNameAttribute 指示关联属性名称在“属性”窗口中显示时是否带有括号。 此类不能被继承。...ListChangedType 指定列表更改方式。 ListSortDirection 指定排序操作方向。 MaskedTextResultHint 指定简洁描述掩码文本分析操作结果。...PropertyFilterOptions 指定哪些属性应由类型描述符报告,尤其是 GetProperties(Object) 方法。此枚举用于指定 Filter 属性

3.8K30

Excelize 发布 2.7.1 版本,Go 语言 Excel 文档基础库

下面是有关该版本更新内容摘要,完整更改列表可查看 changelog。...类型枚举指定图表类型修改了 7 个函数签名,具体更改详见官方文档更新说明新增功能新增函数 SetSheetDimension 与 GetSheetDimension 支持设置与获取工作表已用区域...,并将详细错误信息在 error 数据类型返回返回,相关 issue #1490对输入图片文件扩展名调整为大小写不敏感,相关 issue #1503使用流式写入器流式按行赋值时,对于为 nil...单元格将会跳过生成该单元格,相关 issue #756获取超链接 GetCellHyperLink 函数支持读取合并单元格超链接添加了新导出类型 ChartType 表示图表类型枚举兼容性提升兼容带有函数组工作簿兼容带有严格模式...issue #1492修复了打开行高或列宽为 0 工作表,保存后行高列宽设置失效问题,解决 issue #1461提高了读取带有空白字符共享字符串表索引兼容性,解决 issue #1508性能优化提高了应用带有自定义月份数字格式速度

1.6K51

JAVA自定义扩展Swagger能力,自动通过枚举类生成参数取值含义描述实现策略

当然我们可以约定用于Swagger注解枚举类必须遵循某个固定格式,显然这样实施难度就会提升,并非是我们想要结果。...只要提供个自定义注解,然后添加到枚举类上,指定到底使用枚举哪个字段作为value,以及哪个字段用作含义描述desc字段就行了。...自动生成API入参取值说明 前面已经讲了如何将指定枚举枚举生成为描述字符串,在这里我们直接调用,然后将结果设置到context上下文中即可。...先来看下API接口中入参含义描述效果: 从界面效果上可以看出,不仅自动将取值说明描述显示出来,同时界面调测时候,输入框也变为了下拉框 (因为我们自动给设置了allowableValues属性),...只能输入允许

3.1K40
领券