我这样配置我的昂首阔步:
services.AddSwaggerGen(
options =>
{
options.SwaggerDoc(
IntegrationApiVersion,
new OpenApiInfo { Title = IntegrationApiName, Version = IntegrationApiVersion });
options.SwaggerDoc(
ApplicationApiVersion,
new OpenApiInfo { Title = ApplicationApiName, Version = ApplicationApiVersion });
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "Bearer Token: e.g. \"Bearer <your token here>\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer",
Reference = new OpenApiReference
{
Id = "Bearer",
Type = ReferenceType.SecurityScheme
}
});
options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
options.EnableAnnotations();
options.SchemaFilter<SmartEnumSchemaFilter>();
options.SupportNonNullableReferenceTypes();
options.UseAllOfToExtendReferenceSchemas();
options.IncludeXmlComments(
Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"),
includeControllerXmlComments: true);
options.OperationFilter<TestOperationFilter>();
})
.AddFluentValidationRulesToSwagger();
但是由于只有一个文档需要验证IntegrationApiVersion
,我想隐藏另一个文档的“Authorize”按钮。我发现对AddSecutityDefinition
的调用是添加按钮的原因,但它不允许我定义API名称/版本,而且我不知道如何从过滤器中设置该定义
我设法显示了这些小锁,JWT auth通过添加以下过滤器可以很好地工作:
public class TestOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (context.DocumentName == SwaggerConfiguration.IntegrationApiVersion)
{
operation.Security = new List<OpenApiSecurityRequirement>
{
new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
},
Scheme = "oauth2",
Name = "Bearer",
In = ParameterLocation.Header
},
Array.Empty<string>()
}
}
};
}
}
}
但是我不知道如何为“授权”按钮本身应用同样的解决方案,这样它就只出现在我的IntegrationApiVersion
页面上
我能找到的最接近的东西是人们在做this,但是使用一个叫做NonBodyParameter
的东西在一个过滤器里面添加一个SecurityDefinition
,但是似乎这个类型对我来说已经不再可用了。有人有什么建议吗?
使用斜带扣6.3.0
1条答案
按热度按时间dtcbnfnu1#
安全性定义是在文档级别添加的,因此您必须修改文档。
这里我编写了一个文档过滤器,它只删除该文档的模式。
我希望它是有帮助的