Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ASP.NETCore中设置参数属性_C#_Asp.net Core_Swagger_Swagger Codegen_Swagger 3.0 - Fatal编程技术网

C# 从ASP.NETCore中设置参数属性

C# 从ASP.NETCore中设置参数属性,c#,asp.net-core,swagger,swagger-codegen,swagger-3.0,C#,Asp.net Core,Swagger,Swagger Codegen,Swagger 3.0,我正在使用Swagger对OpenApi 3.0进行序列化。 详细地说,我尝试用以下格式序列化输入查询参数数组 ?myArray=1,2,3,4 我知道如何在swagger文档中实现这一点。只需设置参数。explode=false parameters: - name: myArray in: query explode: false ... 但我不知道如何在我的控制器类的ASP.NETCore3.1中设置这个参数属性来正确生成我的招摇过市文档。 我尝试了几件事,

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

?myArray=1,2,3,4
我知道如何在swagger文档中实现这一点。只需设置参数。explode=false

parameters:
  - name: myArray
    in: query
    explode: false
    ...
但我不知道如何在我的控制器类的ASP.NETCore3.1中设置这个参数属性来正确生成我的招摇过市文档。
我尝试了几件事,比如基于IParameterFilter实现一个过滤器,但是没有一件事对我很好。

幸运的是,我在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 core Startup.cs中的swagger gen

services.AddSwaggerGen(c =>
{
    c.ParameterFilter<QueryArrayParameterFilter>();
}
services.AddSwaggerGen(c=>
{
c、 参数过滤器();
}

幸运的是,我在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 core Startup.cs中的swagger gen

services.AddSwaggerGen(c =>
{
    c.ParameterFilter<QueryArrayParameterFilter>();
}
services.AddSwaggerGen(c=>
{
c、 参数过滤器();
}