列表查询参数中的默认值
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 };
}
}
}
结果:
我正在尝试在 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 };
}
}
}
结果: