我习惯在。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的变化">