ASP.NET Core 如何为 Swagger UI 所有请求配置全局自动生效请求头
解决方案
方案1:使用安全定义配置全局请求头(推荐,和授权头效果完全一致)
该方案可以实现仅在Swagger UI顶部填写一次请求头,自动对所有接口请求生效,无需为每个接口单独配置参数。
在Program.cs(或Startup.cs的ConfigureServices方法)中修改Swagger服务配置:
builder.Services.AddSwaggerGen(options => { // 定义全局请求头规则 options.AddSecurityDefinition("VeryImportantHeader", new OpenApiSecurityScheme { Name = "VeryImportantHeader", Type = SecuritySchemeType.ApiKey, In = ParameterLocation.Header, Description = "全局必填的自定义请求头", Scheme = "ApiKeyScheme" }); // 将请求头应用到所有接口 var scheme = new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "VeryImportantHeader" } }; options.AddSecurityRequirement(new OpenApiSecurityRequirement { { scheme, Array.Empty<string>() } }); // 你之前使用的IOperationFilter实现可以删除 });
配置完成后打开Swagger UI,右上角会出现「Authorize」按钮,点击后输入对应头值并确认,后续所有接口发起请求时都会自动携带该请求头。
方案2:自定义Swagger请求拦截器(适合有自定义逻辑的场景)
如果需要更灵活的控制逻辑,比如自定义输入位置、动态修改头值,可以使用Swagger UI的请求拦截器实现,配置如下:
在Program.cs的中间件配置部分修改Swagger UI配置:
app.UseSwaggerUI(options => { // 注入请求拦截器,所有请求发送前都会自动添加指定头 options.Interceptors.RequestInterceptor = """ function(request) { // 示例从localStorage取值,你可以自行扩展全局输入控件将值存入localStorage request.headers['VeryImportantHeader'] = window.localStorage.getItem('VeryImportantHeaderValue'); return request; } """; });
如果需要为部分接口排除全局头,可以自定义
[SkipGlobalHeader]标记特性,结合IOperationFilter过滤对应接口的安全要求即可。
内容的提问来源于stack exchange,提问作者Sergei B
相关产品推荐
相关产品推荐

