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

.NET Core 6 WebAPI中修改Swagger过滤器为路径参数设置默认值的实现方法

解决方案:为Swagger路径参数设置默认值(Swashbuckle.AspNetCore 6.2.3)

针对你使用的Swashbuckle.AspNetCore 6.2.3版本,我们可以修改SwaggerDefaultValueFilter类的Apply方法,识别自定义的SwaggerDefaultValueAttribute并为对应的路径参数设置默认值。以下是完整的实现步骤:

1. 完善SwaggerDefaultValueFilter代码

public class SwaggerDefaultValueFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        // 从控制器的元数据中获取自定义的SwaggerDefaultValueAttribute实例
        var defaultValueAttributes = context.ApiDescription.ActionDescriptor.EndpointMetadata
            .OfType<SwaggerDefaultValueAttribute>();

        foreach (var attr in defaultValueAttributes)
        {
            // 匹配对应的路径参数
            var targetParam = operation.Parameters
                .FirstOrDefault(p => p.Name.Equals(attr.Name, StringComparison.OrdinalIgnoreCase) 
                                    && p.In == ParameterLocation.Path);

            if (targetParam != null)
            {
                // 设置参数的默认值(Swagger 6.x版本需通过Schema.Default配置)
                targetParam.Schema.Default = new OpenApiString(attr.Value);
                
                // 可选:如果路由参数是可选的(比如路由定义为{culture:culture?}),取消下面的注释
                // targetParam.Required = false;
            }
        }
    }
}

2. 关键逻辑说明

  • 获取自定义特性:通过EndpointMetadata读取控制器类上标记的SwaggerDefaultValueAttribute,因为你的特性是标记在类级别的(AttributeTargets.Class)。
  • 定位路径参数:从接口的参数列表中筛选出名称匹配、且位置为Path的参数,确保我们修改的是路由里的路径参数而非其他类型参数。
  • 设置默认值:使用OpenApiString包装默认值赋值给Schema.Default,这是Swagger 6.x版本中设置默认值的正确方式(旧版本的直接赋值方式已被废弃)。
  • 可选的非必填设置:如果你的路由参数是可选的(比如路由定义为{culture:culture?}),可以取消targetParam.Required = false的注释,这样Swagger UI会允许不输入该参数,自动使用默认值发起请求。

3. 效果验证

启动WebAPI并打开Swagger UI后,AccountsController的接口路径参数culture会显示默认值en-US,点击"Try it out"时输入框会自动填充这个默认值,方便快速测试接口。

如果你的路由参数是必填的(当前路由定义{culture:culture}没有?),Swagger UI依然会要求输入该参数,但会将默认值作为提示显示在输入框中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:08:11