首页
学习
活动
专区
工具
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 () {

2K10

【ASP.NET Core 基础知识】--Web API--Swagger文档生成

简洁明了的描述: 使用简洁而明了的语言,避免使用过于复杂的术语,确保文档容易理解。 实例和示例代码: 提供详细的实例和示例代码,以演示API的使用方式。这有助于开发者更好地理解如何调用API。...使用图表和图形: 使用图表、图形和表格等可视化元素,以更直观地解释API的结构和工作原理。 错误处理说明: 在文档中详细描述错误处理机制,包括可能发生的错误、错误代码、常见问题和解决方案。...以下是一些常见的Swagger配置选项和如何修改它们的示例: 更改Swagger文档信息: 你可以修改Swagger文档的基本信息,如标题、版本和描述。...Password",你可以告诉Swagger不要在文档中显示密码属性。 自定义过滤器: 通过实现 Swagger 过滤器接口,你可以编写自定义逻辑,控制哪些信息显示在 Swagger 文档中。...确保你的授权策略与配置中的一致,以限制只有授权用户能够访问 Swagger UI。

84800
  • 了解 .NET 9 中的新增的包 Microsoft.AspNetCore.OpenApi

    OpenAPI 的核心是一个机器可读的文档,用于描述 API 中可用的 Endpoint(端点)。它不仅包含有关参数、请求和响应的信息,还包含其他元数据,例如属性描述、与安全相关的元数据等。...随着最近基于 AI 的开发工具的激增,OpenAPI 作为一种以机器可以理解的方式描述 API 的方式变得更加重要。...然后,可以通过不同方式(例如使用属性或自定义代码)来扩充端点,以进一步丰富生成的文档,从而为其使用者提供出色的开发人员体验。...虽然这两个库都可以重构以支持原生 AoT,但这将是一项大量的工作,因为它需要对两个库的核心功能进行大量重写。...事实证明,这个分析器中存在一个错误,它没有捕获某些使用模式,这就是它以前没有被捕获的原因。 将代码更改为 use 是一个很容易的更改,但这并没有回答为什么首先要花费这么多时间的问题。

    17310

    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.3K10

    再见了,Swagger:那么.NET 9如何重新定义API文档?

    开发者将需要调整他们描述和可视化API端点的方式。那么,为什么会发生这种转变?对于.NET开发者来说,这意味着什么? 为什么微软移除Swagger?...微软宣布,标准Web API模板中的Swagger集成将被取消,原因是Swashbuckle缺乏持续维护。Swashbuckle.AspNetCore包一直被广泛用于生成Swagger文档。...然而,与长期以来提供交互式界面以显示API端点的Swagger不同,Microsoft.AspNetCore.OpenApi并没有自带用户界面。...可考虑OpenAPI、NSwag或自定义解决方案,选择最适合团队需求的工具。 总结 在.NET 9中默认模板移除Swagger标志着整个.NET生态系统中API文档最佳实践的转变。...通过为项目选择最佳解决方案(如NSwag、Swashbuckle或自定义界面),你仍然可以在.NET 9中提供清晰、直观的API文档。

    11700

    .NET周刊【11月第3期 2024-11-17】

    而后期绑定则允许在运行时更改类型,缺乏编译时检查可能导致错误。反射作为动态绑定的一种,提供了操作元数据的能力,尽管灵活但性能较低。反射在运行时需根据元数据查询,过程依赖字符串匹配,带来额外开销。...实验显示,在64位设置下,内存使用可达到定价层允许的最大值。参考文献建议调整为64位进程以增加内存可用性,并警告可能需重新启动应用程序。...、枚举名称和描述。...文中详细讲解了如何确保枚举值的合法性,通过Enum.IsDefined方法排除非枚举项,并对带有Flags特性的位标志枚举进行特殊处理。这些处理保证了位标志组合的合法性,提升了方法的通用性和扩展性。...用户可定义特性如ColumnDataType或PasteMarkDown,以实现富文本或Markdown输入。提交信息中反映内容设定中的参数配置,如args2字段可隐藏,以保数据传递后台。

    8410

    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将负责检测更改并为我们支持撤消和重做。 ? 接下来,我们需要知道要显示的滑块的限制,该限制存储在属性中。我们可以通过PropertyDrawer的attribute属性访问它。...这可能不是问题,因为颜色不需要精确,但是它使得无法检查要复制的一个滑块的值以用于其他地方。因此,我们也为最小值和最大值添加常规输入字段。...首先使用EditorGUI.FloatField绘制一个最小的float输入字段,不带标签。它返回可能更改的值。之后是滑块,然后是最大输入字段。 ? ?

    2.7K30

    Swift基础 结构和类

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

    9900

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

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

    11.1K30

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

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

    51530

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

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

    1.2K30

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

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

    1.5K40

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

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

    28610

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

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

    3.5K10
    领券