目录
官方文档
添加BearerSecuritySchemeTransformer类
注册服务
官方文档
自定义 OpenAPI 文档 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/customize-openapi?view=aspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/customize-openapi?view=aspnetcore-9.0
添加BearerSecuritySchemeTransformer类
public sealed class BearerSecuritySchemeTransformer(IAuthenticationSchemeProvider authenticationSchemeProvider) : IOpenApiDocumentTransformer
{public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransformerContext context, CancellationToken cancellationToken){var authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync();if (authenticationSchemes.Any(authScheme => authScheme.Name == JwtBearerDefaults.AuthenticationScheme)){var requirements = new Dictionary<string, OpenApiSecurityScheme>{[JwtBearerDefaults.AuthenticationScheme] = new OpenApiSecurityScheme{Type = SecuritySchemeType.Http,Scheme = JwtBearerDefaults.AuthenticationScheme.ToLower(),In = ParameterLocation.Header,BearerFormat = "Json Web Token"}};document.Components ??= new OpenApiComponents();document.Components.SecuritySchemes = requirements;foreach (var operation in document.Paths.Values.SelectMany(path => path.Operations)){operation.Value.Security.Add(new OpenApiSecurityRequirement{[new OpenApiSecurityScheme{Reference = new OpenApiReference{Id = JwtBearerDefaults.AuthenticationScheme,Type = ReferenceType.SecurityScheme}}] = Array.Empty<string>()});}}}
}
注册服务
builder.Services.AddOpenApi(opt =>
{opt.AddDocumentTransformer<BearerSecuritySchemeTransformer>();
});