列表查询参数中的默认值

Default values in list query parameter

我正在尝试在 Swashbuckle 中显示默认值。有没有办法在 .NET Core API 的查询列表参数中定义默认值。 类似于:

[HttpGet("test")]
public ActionResult<string> TestFunc([FromQuery, BindRequired] List<string> testList = ["value1", "value2"]) {
//Do some stuff
           return Ok(results);

}

据我所知,我们无法将默认参数值设置为 compile-time 常量,这意味着我们无法为列表或字符串数​​组设置默认值。

这意味着无法在网络 api 参数中设置默认值。

如果你想显示swagger里面的默认值。您可以创建一个继承自 IOperationFilter 的 class。

然后你可以检查参数名称,如果名称等于testList,你可以设置自定义描述。

更多细节,您可以参考下面的代码示例:

自定义class:

public class ParameterClass : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null)
        {
            return;
        }

        foreach (var parameter in operation.Parameters) {

            if (parameter.Name == "testList")
            {
                parameter.Description = @"Default value: ['value1', 'value2']";
            }
        }

 
    }
}

使用过滤器注册 swaggergen :

      services.AddSwaggerGen(c =>
        {
        
c.OperationFilter<ParameterClass>();
        });

结果:


更新:

如果想设置query string之类的参数,可以修改apply方法如下:

    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null)
        {
            return;
        }


        foreach (var parameter in operation.Parameters) {

            if (parameter.Name == "testList")
            {
                parameter.In = 0;
                 parameter.Description = @"['value1', 'value2']";
               
                parameter.Schema = new OpenApiSchema() { Type = "string" ,Items = null };
                 
            }
        }
    }

结果: