幸运的是,当我在 GitHub 上的Swashbuckle.AspNetCore中找到讨论时,我能够解决这个问题。
实现自定义参数过滤器是正确的方法。
public class QueryArrayParameterFilter : IParameterFilter
{
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
if (!parameter.In.HasValue || parameter.In.Value != ParameterLocation.Query)
return;
if (parameter.Schema?.Type == "array" && parameter.Name.Equals("myArray"))
{
var value = null as IOpenApiExtension;
parameter.Extensions.TryGetValue("explode", out value);
if (value == null)
parameter.Extensions.Add("explode", new OpenApiBoolean(false));
}
}
}
过滤器必须应用于 ASP.Net 核心 Startup.cs 中的 swagger gen
services.AddSwaggerGen(c =>
{
c.ParameterFilter<QueryArrayParameterFilter>();
}