gpt4 book ai didi

c# - Swagger 从 ASP.Net 核心设置参数属性

转载 作者:行者123 更新时间:2023-12-02 18:45:45 25 4
gpt4 key购买 nike

我正在使用 Swagger 为 OpenApi 3.0 进行序列化。详细地说,我尝试使用以下格式序列化输入查询参数数组

?myArray=1,2,3,4

我知道如何在 swagger 文档中实现这一点。只需设置 parameter.explode=false

parameters:
- name: myArray
in: query
explode: false
...

但我不知道如何在我的 Controller 类中的 ASP.Net Core 3.1 中设置此参数属性以正确生成我的 swagger 文档。我尝试了几种方法,例如实现基于 IParameterFilter 的过滤器,但对我来说没有任何效果。

最佳答案

幸运的是,我在 Swashbuckle.AspNetCore 中找到了讨论,因此能够解决这个问题。在 GitHub 上。

实现自定义参数过滤器是正确的方法。

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

关于c# - Swagger 从 ASP.Net 核心设置参数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67467005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com