ASP.NET中如何修改Swagger的DateTime示例值(实体类不可修改)
不修改实体类前提下修改Swagger中Date字段的示例格式
完全可行,不需要修改类库中的Msg类,通过Swashbuckle的过滤器机制就能实现,下面提供两种常用方案:
方案一:全局修改Msg类的Swagger Schema(Schema Filter)
这种方法会全局调整所有使用Msg类的接口中date字段的示例值和格式说明,适合需要统一规范该类展示效果的场景。
- 创建自定义Schema过滤器类
using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; using YourClassLibraryNamespace; // 替换为Msg类所在的类库命名空间 public class MsgSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { // 匹配目标实体类Msg if (context.Type == typeof(Msg)) { // 找到Swagger中驼峰命名的date属性 if (schema.Properties.TryGetValue("date", out var dateProperty)) { // 设置自定义示例值 dateProperty.Example = new OpenApiString("2023-07-27"); // 可选:明确标注格式为日期(非日期时间),让Swagger显示更准确的格式提示 dateProperty.Format = "date"; } } } }
- 在Swagger配置中注册过滤器
如果是.NET 6+的Program.cs:
builder.Services.AddSwaggerGen(c => { // 添加自定义Schema过滤器 c.SchemaFilter<MsgSchemaFilter>(); // 其他Swagger配置项(如文档标题、版本等) });
如果是.NET 5及更早版本的Startup.cs(在ConfigureServices方法中):
services.AddSwaggerGen(c => { c.SchemaFilter<MsgSchemaFilter>(); // 其他Swagger配置项 });
方案二:针对单个接口修改请求体示例(Operation Filter)
如果只需要调整某一个特定接口的请求体示例,不影响其他使用Msg类的接口,用这种方法更精准。
- 创建自定义Operation过滤器类
using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; public class MsgOperationFilter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { // 筛选目标接口:替换为你的控制器和动作名称(比如"OrderController.CreateOrder") var targetAction = "YourControllerName.YourActionName"; if (context.ApiDescription.ActionDescriptor.DisplayName.Contains(targetAction)) { // 获取接口的JSON请求体配置 if (operation.RequestBody?.Content.TryGetValue("application/json", out var jsonContent) == true) { // 直接设置完整的请求体示例 jsonContent.Example = new OpenApiObject { ["region"] = new OpenApiString("string"), ["date"] = new OpenApiString("2023-07-27") }; } } } }
- 注册过滤器
同样在AddSwaggerGen中添加:
builder.Services.AddSwaggerGen(c => { c.OperationFilter<MsgOperationFilter>(); // 其他Swagger配置 });
两种方案都不需要改动类库中的Msg类,仅在你的ASP.NET Web项目中实现即可,重启项目后Swagger文档就会显示修改后的示例值。
内容的提问来源于stack exchange,提问作者D.J. Elkind
相关产品推荐
相关产品推荐

