如何解决Swagger 从 ASP.Net 核心设置参数属性
我正在使用 Swagger 进行 OpenApi 3.0 的序列化。 详细地,我尝试使用以下格式序列化输入查询参数数组
?myArray=1,2,3,4
我知道如何在 swagger 文档中实现这一点。只需设置parameter.explode=false
parameters:
- name: myArray
in: query
explode: false
...
但我不知道如何在控制器类中的 ASP.Net Core 3.1 中设置此参数属性以正确生成我的 swagger 文档。 我尝试了多种方法,例如基于 IParameterFilter 实现过滤器,但对我来说没有任何效果。
解决方法
幸运的是,当我在 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>();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。