列表查询参数中的默认值

时间:2020-09-16 11:35:36

标签: asp.net-core swashbuckle

我正在尝试在Swashbuckle中显示默认值。有没有一种方法可以在.NET Core API的查询列表参数中定义默认值。 像这样:

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

}

1 个答案:

答案 0 :(得分:2)

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

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

如果要在招摇内显示默认值。您可以创建一个从IOperationFilter继承的类。

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

更多详细信息,您可以参考以下代码示例:

自定义类别:

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>();
        });

结果:

enter image description here


更新:

如果要设置查询字符串之类的参数,则可以如下修改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 };
                 
            }
        }
    }

结果:

enter image description here