如何在.net Core 6中使用Swagger包含授权头



我习惯在。net Core的旧版本中使用swagger。然而,现在使用。net Core 6,我不能在swagger中使用授权按钮添加授权头。

我怎么能这么做?

我已经把这个添加到Program.cs:

builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc(API_VERSION, new OpenApiInfo
{
Title = PROJECT_NAME,
Version = API_VERSION
});
var xmlFile = Assembly.GetExecutingAssembly().GetName().Name + XML_EXTENSION;
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
c.AddSecurityDefinition(SECURITY_TYPE, new OpenApiSecurityScheme
{
Description = SECURITY_DESCRIPTION,
In = ParameterLocation.Header,
Name = SECURITY_HEADER_NAME,
Type = SecuritySchemeType.ApiKey,
Scheme = SECURITY_TYPE
});
c.OperationFilter<SecurityRequirementsOperationFilter>();
});

:

app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint(SWAGGERFILE_PATH, PROJECT_NAME + API_VERSION);
c.RoutePrefix = string.Empty;
});

我希望现在还不算太晚,如果太晚了,我希望这个答案能帮助到其他人。今天遇到了同样的问题,终于找到了一个西班牙文的帖子,给我指明了正确的方向。

ASP。. NET: descripbiendo una API con OpenAPI y Swagger

你所要做的就是通过c.AddSecurityRequirement添加一个OpenApiSecurityRequirement,它包含了第二个OpenApiSecurityScheme。

在我的例子中,我们使用JWT授权承载器,但我认为这可能也适用于您

这是我的AddSwaggerGen,现在它的工作原理与。net 5相同。

builder?.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v2", new OpenApiInfo { Title = "Internal", Version = "v2" });
// Bearer token authentication
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
{
Name = "Authorization",
BearerFormat = "JWT",
Scheme = "Bearer",
Description = "Specify the authorization token",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
};
c.AddSecurityDefinition("Bearer", securityDefinition);

//New code to work with .NET6
//I've splitted in two parts for better reading
OpenApiSecurityRequirement securityRequirement = new OpenApiSecurityRequirement();
OpenApiSecurityScheme secondSecurityDefinition = new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
};
securityRequirement.Add(secondSecurityDefinition, new string[] { });
c.AddSecurityRequirement(securityRequirement);
//End of new code


});

将令牌粘贴到Authorize按钮中,如果控件方法需要授权,Swagger将把它放在header中。

其他帮助我理解的页面:

描述参数Swagger认证查看"OpenAPI 2.0的变化">