如何在Swagger UI中隐藏固定请求头并自动发送硬编码值?
实现Swagger自动发送硬编码自定义请求头(禁止用户修改)
要实现自定义请求头硬编码自动发送、不让用户在Swagger UI中修改或输入,需要从隐藏参数显示和自动注入请求头两方面入手,以下是具体实现方案:
1. 移除Swagger UI中的请求头输入项
你原来的MyCustomTokenHeader实现会把请求头作为可输入参数展示在Swagger UI里,这不符合需求,直接注释或删除对应的OperationFilter配置即可,避免用户看到这个请求头的输入框。
2. 自动注入固定请求头
通过拦截Swagger UI的请求,在发送前自动添加固定值的请求头,有两种常用方式:
方式一:前端脚本拦截(推荐)
在Swagger UI配置中注入自定义JavaScript脚本,拦截请求并添加固定请求头:
首先,在项目的wwwroot目录下创建swagger-custom.js文件,写入以下代码:
(function() { // 保存原生fetch方法 const originalFetch = window.fetch; window.fetch = function(resource, options) { options = options || {}; options.headers = options.headers || {}; // 硬编码添加自定义请求头 options.headers['Header-Parameter'] = 'my-default-header-value'; return originalFetch(resource, options); }; })();
然后在Swagger配置中引入这个脚本(以.NET 6+为例,在Program.cs中):
builder.Services.AddSwaggerGen(c => { // 保留你的Swagger文档配置,比如版本、标题等 // 注释或删除原来的OperationFilter配置:c.OperationFilter<MyCustomTokenHeader>(); }); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API名称 V1"); // 注入自定义脚本 c.InjectJavascript("/swagger-custom.js"); });
方式二:后端中间件拦截
如果希望在后端统一处理,可添加全局中间件,给Swagger相关请求自动添加请求头:
app.Use(async (context, next) => { // 仅对Swagger路径下的请求添加头 if (context.Request.Path.StartsWithSegments("/swagger")) { context.Request.Headers.TryAdd("Header-Parameter", "my-default-header-value"); } await next(); });
效果说明
完成配置后,用户在Swagger UI中看不到这个自定义请求头的输入项,点击"Try it out"发送请求时,系统会自动带上硬编码的Header-Parameter请求头,用户无法修改该值。
内容的提问来源于stack exchange,提问作者Navorski
相关产品推荐
相关产品推荐

