C# 如何在ASP.NETCore中的Swagger中添加基本授权头

C# 如何在ASP.NETCore中的Swagger中添加基本授权头,c#,asp.net-web-api,swagger,.net-core,swagger-ui,C#,Asp.net Web Api,Swagger,.net Core,Swagger Ui,如何在Asp.NETCore中的Swagger中添加基本授权头。默认情况下,api键被视为查询字符串,但我需要对其进行自定义,以便将其包含在标题中。经过数小时的修补,我找到了此解决方案 首先按照以下步骤实施IOperationFilter: public class AddRequiredHeaderParameter : IOperationFilter { void IOperationFilter.Apply(Operation operation, Operati

如何在Asp.NETCore中的Swagger中添加基本授权头。默认情况下,api键被视为查询字符串,但我需要对其进行自定义,以便将其包含在标题中。

经过数小时的修补,我找到了此解决方案

首先按照以下步骤实施IOperationFilter:

public class AddRequiredHeaderParameter : IOperationFilter
    {
        void IOperationFilter.Apply(Operation operation, OperationFilterContext context)
        {
            var param = new Param();
            param.Name = "authorization";
            param.In = "header";
            param.Description = "JWT Token";
            param.Required = true;
            param.Type = "string";
            if (operation.Parameters == null)
                operation.Parameters = new List<IParameter>();
            operation.Parameters.Add(param);
        }
    }
公共类addRequiredHeader参数:IOperationFilter
{
void IOperationFilter.Apply(操作操作,操作筛选器上下文)
{
var param=新参数();
param.Name=“授权”;
参数In=“header”;
参数Description=“JWT令牌”;
参数Required=true;
param.Type=“字符串”;
if(operation.Parameters==null)
operation.Parameters=newlist();
操作.参数.添加(参数);
}
}
然后实现接口ipParameter

class Param : IParameter
    {

        public string Description { get; set; }

        public Dictionary<string, object> Extensions { get {return new Dictionary<string, object>{{"test", true}};} }

        public string In { get; set; }

        public string Name { get; set; }

        public string Type { get; set; }

        public bool Required { get; set; }
    }
类参数:i参数
{
公共字符串说明{get;set;}
公共字典扩展{get{返回新字典{{“test”,true};}
{get;set;}中的公共字符串
公共字符串名称{get;set;}
公共字符串类型{get;set;}
需要公共bool{get;set;}
}
这里非常重要的是Type属性,它不是 界面需要,但它必须作为招摇过市的ui存在 我需要它

最后把它挂到你的虚张声势的搭扣上

services.ConfigureSwaggerGen(options =>
{
    options.OperationFilter<AddRequiredHeaderParameter>();
    options.SingleApiVersion(new Info
    {
        Version = "v1",
        Title = "Test",
        Description = "Test Service",
        TermsOfService = "None"
    });
    options.DescribeAllEnumsAsStrings();
});
services.ConfigureSwaggerGen(选项=>
{
options.OperationFilter();
选项。单一版本(新信息
{
Version=“v1”,
Title=“测试”,
Description=“测试服务”,
TermsOfService=“无”
});
options.descripbeAllenumsasstrings();
});

希望有帮助;)

根据Mohsen的回答,我们发现我们可以做到这一点,而不必实现iPareter接口

public class AddRequiredHeaderParameter : IOperationFilter
{
    void IOperationFilter.Apply(Operation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null)
            operation.Parameters = new List<IParameter>();
            operation.Parameters.Add(new NonBodyParameter
            {
                Name = "Authorization",
                In = "header",
                Description = "JWT Token",
                Required = true,
                Type = "string"
            });
    }
}
公共类addRequiredHeader参数:IOperationFilter
{
void IOperationFilter.Apply(操作操作,操作筛选器上下文)
{
if(operation.Parameters==null)
operation.Parameters=newlist();
operation.Parameters.Add(新的非主体参数
{
Name=“授权”,
In=“header”,
Description=“JWT令牌”,
必需=真,
Type=“string”
});
}
}
最后把它连接到你的虚张声势的配置上

    services.ConfigureSwaggerGen(options =>
{
    options.OperationFilter<AddRequiredHeaderParameter>();
    options.SingleApiVersion(new Info
    {
        Version = "v1",
        Title = "Test",
        Description = "Test Service",
        TermsOfService = "None"
    });
    options.DescribeAllEnumsAsStrings();
});
services.ConfigureSwaggerGen(选项=>
{
options.OperationFilter();
选项。单一版本(新信息
{
Version=“v1”,
Title=“测试”,
Description=“测试服务”,
TermsOfService=“无”
});
options.descripbeAllenumsasstrings();
});
您可以使用以下代码:

services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                ...
            });

            c.AddSecurityDefinition("JWT Token", new ApiKeyScheme
            {
                Description = "JWT Token",
                Name = "Authorization",
                In = "header"
            });
        });

它会将JWT令牌作为授权头添加到每个请求中。

如果您使用的是Swashback.AspNetCore v5.0.0-rc2,请参见以下内容:

   c.AddSecurityDefinition("Basic", new OpenApiSecurityScheme
            {
                Description = "Basic auth added to authorization header",
                Name = "Authorization",
                In = ParameterLocation.Header,
                Scheme = "basic",
                Type = SecuritySchemeType.Http
            });

            c.AddSecurityRequirement(new OpenApiSecurityRequirement
            {
                {
                    new OpenApiSecurityScheme
                    {
                        Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Basic" }
                    },
                    new List<string>()
                }
            });
c.AddSecurityDefinition(“Basic”),新的OpenApiSecurityScheme
{
Description=“已将基本身份验证添加到授权标头”,
Name=“授权”,
In=参数位置.Header,
Scheme=“basic”,
Type=SecuritySchemeType.Http
});
c、 AddSecurityRequest(新的OpenAPISecurityRequest
{
{
新的OpenApiSecurityScheme
{
Reference=new openapirection{Type=ReferenceType.SecurityScheme,Id=“Basic”}
},
新名单()
}
});