.NET 使用 ISchemaFilter 过滤器修改参数默认值

一、 背景

[HttpPost] public string Test(SearchReq search) { return "ok" + search.Name; } 从 swagger 中可以看出, 字符串若为空,则默认提交string,若要修改为指定字符,可修改过滤器 image.png

二、修改策略

2.1 创建过滤器

通过类型设置默认值

``` using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen;

namespace WebApplication2.Conf { public class Filter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if(schema == null) { return; } var obj = schema; foreach(var item in obj.Properties) { if (item.Value.Type == "string" && item.Value.Default == null) { item.Value.Default = new OpenApiString(""); } } } } }

```

image.png

通过属性名设置默认值

``` using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen;

namespace WebApplication2.Conf { public class Filter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if(schema == null) { return; } var obj = schema; foreach(var item in obj.Properties) { if (item.Value.Type == "string" && item.Value.Default == null) { item.Value.Default = new OpenApiString(""); } if (item.Key == "pageIndex") { item.Value.Default = new OpenApiInteger(1); } else if(item.Key =="pageSize") { item.Value.Default = new OpenApiInteger(10); }

}
    }
}

}

```

image.png

通过属性修改默认值

修改实体类

``` using System.ComponentModel;

namespace WebApplication2.Model { public class SearchReq { [DefaultValue("zhangsna")] public String Name { get; set; }

public string Description { get;set; }

    public int PageIndex { get; set; }

    public int PageSize { get; set; }
}

}

```

修改过滤器

``` using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; using System.ComponentModel; using System.Reflection;

namespace WebApplication2.Conf { public class Filter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if(schema == null) { return; } var obj = schema; foreach(var item in obj.Properties) { if (item.Value.Type == "string" && item.Value.Default == null) { item.Value.Default = new OpenApiString(""); } if (item.Key == "pageIndex") { item.Value.Default = new OpenApiInteger(1); } else if(item.Key =="pageSize") { item.Value.Default = new OpenApiInteger(10); } // 通过特性来实现 DefaultValueAttribute defaultValue = (context.ParameterInfo?.GetCustomAttribute ()); if(defaultValue != null) { item.Value.Example = (IOpenApiAny)defaultValue.Value; } } } } }

```

image.png

2.2 加载过滤器

``` builder.Services.AddSwaggerGen(option => { // 设置对象类型参数默认值 option.SchemaFilter (); });

```

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值