Swagger 调试,我不想再复制粘贴token啦~

作为后端开发,进行Web Api 调试,除了使用 Postman, Apifox 等 Web Api 调试工具之外,我想使用Swagger进行调试应该是更方便,更常用的方式了吧。

那么在需要 token 授权的情况下,每次调试都需要调用一下登录API, 然后复制返回的 token, 再粘贴到上图的文本框里,点一下Authorize按钮,是不是很麻烦呢?

我的懒病犯了,我真的不想再复制粘贴token啦~

要是可以只要调用一下登录接口,返回的token就自动添加进去,自动授权,那该多好啊~

Let's go!

第一步:添加 custom.js 文件
  1. 在 webapi 的项目中添加wwwroot文件夹;
  2. 新建custom.js文件到wwwroot/swagger-ui/目录下,目录没有自己建,当然js文件名自己随便取;
  3. 编辑custom.js文件内容:
js 复制代码
console.log("Custom JS has been loaded and executed.");  
 
const originalFetch = window.fetch;  
  
window.fetch = function(...args) {  
    const [resource, config] = args;  
  
    return originalFetch.apply(this, args).then(response => {  
        // 检查请求的 URL        
        const requestUrl = new URL(response.url, window.location.origin).pathname;  
        if (requestUrl.endsWith("/login")) {  
            // 克隆响应以便读取  
            response.clone().json().then(data => {  
                const token = data.result.token;  
                if (token) {  
                    console.log("Token received via fetch override:", token);  
                    authorizeSwagger(token);  
                } else {  
                    console.warn("Token not found in login response.");  
                }            
            }).catch(err => {  
	            console.error("Failed to parse login response:", err);  
            });        
        }        
        return response;  
    });
}
  
// 定义授权函数  
function authorizeSwagger(token) {  
    const bearerToken = 'Bearer ' + token;  
    console.log("Setting Swagger UI Authorization with token:", bearerToken);  
    if (window.ui && window.ui.authActions) {  
        window.ui.authActions.authorize({  
            Bearer: {  
                name: 'Bearer',  
                schema: {  
                    type: 'apiKey',  
                    in: 'header',  
                    name: 'Authorization',  
                    description: '',  
	            },                
	            value: bearerToken,  
	        }        
        });        
        console.log("Authorization set successfully");  
    } else {  
        console.warn("Swagger UI authActions not available yet.");  
    }
}
    
第二步:启用静态文件服务

在Program.cs 中,启用静态文件服务;

C# 复制代码
var app = builder.Build();

// 启用静态文件服务
app.UseStaticFiles();
第三步:SwaggerUI 中间件中注入 js 脚本

使用InjectJavascript的方式将上面的custom.js注入到SwaggerUI中间件中。

复制代码
// 启用Swagger  
app.UseSwagger();  
app.UseSwaggerUI(options =>  
{  
    options.InjectJavascript("/swagger-ui/custom.js");  
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");  
});

OK!

大家快来试试吧~

相关推荐
csdn_aspnet2 天前
C# .NetCore Swagger ISchemaFilter 处理枚举、特殊类型
c#·.netcore·swagger
csdn_aspnet2 天前
C# .NetCore Swagger ISchemaFilter Long 转 String 防精度丢失
c#·.netcore·swagger
csdn_aspnet3 天前
C# .NetCore Swagger ISchemaFilter 注入示例值、描述
c#·.netcore·swagger
信也科技布道师4 天前
把 Swagger 变成联调工作台:Swagger Pro 工程实践
swagger
愛芳芳1 个月前
Swagger2 多环境动态配置实战指南
java·后端·maven·springboot·swagger
正儿八经的少年2 个月前
javaDoc,swagger,springDoc 的作用和区别
swagger·springdoc·javadoc
Murphy20232 个月前
.net10 WEB API项目中启用Swagger 页面的配置步骤
swagger·asp.net web api·.net10
逻极3 个月前
FastAPI 实战:从入门到自动化文档,如何把API开发效率提升200%
python·api·fastapi·swagger·异步
qq_262642374 个月前
Swagger/Knife4j 下载文件损坏,但前端却能正常打开
swagger·knife4j·附件下载
柠檬苏打z5 个月前
C# SwaggerLoginAuthPlugin 一款给Swagger文档加登录页面的小插件
.net·swagger