public class AddXXHeaderFilter: IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors; var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter); var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter); if (isAuthorized && !allowAnonymous) { if (operation.Parameters == null) operation.Parameters = new List<OpenApiParameter>(); operation.Parameters.Add(new OpenApiParameter { Name = "name", In = ParameterLocation.Header, Description = "參數備注", Required = true, Schema = new OpenApiSchema { Type = "string", Default = new OpenApiString("Bearer ") } }); } } }
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = builder.Configuration["ServiceName"] });
c.OperationFilter<AddXXHeaderFilter>();
});
參考 https://www.thinbug.com/q/41493130