You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swagger UI中修改decimal类型的示例值为0,00?

解决Swashbuckle.AspNetCore v6.1.4中Decimal类型示例值改为0,00的问题

你之前的代码仅设置了MultipleOf,这并非修改示例值的正确方式。要修改Swagger UI里的Decimal类型示例值,需直接为OpenApiSchema的Example属性赋值,同时配合格式设置确保显示为两位小数格式。以下是可行方案:

方案1:自定义SchemaFilter全局处理Decimal类型

创建一个SchemaFilter,针对模型中的Decimal类型字段/属性,直接指定示例值并配置格式约束:

public class DecimalExampleSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        // 处理模型属性(大多数场景下模型用属性定义)
        var decimalProps = context.Type.GetProperties()
            .Where(p => p.PropertyType == typeof(decimal) || p.PropertyType == typeof(decimal?));
        
        foreach (var prop in decimalProps)
        {
            if (schema.Properties.TryGetValue(prop.Name, out var propSchema))
            {
                // 强制设置示例值为0,00
                propSchema.Example = new OpenApiString("0,00");
                // 指定格式为decimal,让Swagger UI识别为小数类型
                propSchema.Format = "decimal";
                // 设置步长为0.01,确保输入符合两位小数要求
                propSchema.MultipleOf = new OpenApiDecimal(0.01M);
            }
        }

        // 处理模型字段(如果你的模型用字段定义)
        var decimalFields = context.Type.GetFields()
            .Where(f => f.FieldType == typeof(decimal) || f.FieldType == typeof(decimal?));
        
        foreach (var field in decimalFields)
        {
            if (schema.Properties.TryGetValue(field.Name, out var fieldSchema))
            {
                fieldSchema.Example = new OpenApiString("0,00");
                fieldSchema.Format = "decimal";
                fieldSchema.MultipleOf = new OpenApiDecimal(0.01M);
            }
        }
    }
}

随后在项目配置中注册这个过滤器:

services.AddSwaggerGen(c =>
{
    // 其他Swagger配置...
    c.SchemaFilter<DecimalExampleSchemaFilter>();
});

方案2:针对单个属性设置示例值

如果仅需修改特定属性的示例值,可以使用Swashbuckle.AspNetCore.Filters包中的特性(注意安装与v6.1.4兼容的版本):

using Swashbuckle.AspNetCore.Filters;

public class YourModel
{
    [SwaggerExample("0,00")]
    public decimal Amount { get; set; }
}

然后在配置中启用示例过滤器:

services.AddSwaggerGen(c =>
{
    // 其他Swagger配置...
    c.ExampleFilters();
});

注意事项

  • 直接设置字符串类型的示例值"0,00"可以强制Swagger UI显示为逗号分隔的两位小数,不受浏览器区域设置影响。
  • MultipleOf = 0.01M的设置会约束输入框的步长,引导用户输入符合两位小数规则的数值。

内容的提问来源于stack exchange,提问作者Russo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:05:20