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

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3003

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


那么在需要 token 授权的情况下,每次调试都需要调用一下登录API, 然后复制返回的 token, 再粘贴到上图的文本框里,点一下Authorize按钮,是不是很贫苦呢?
我的懒病犯了,我真的不想再复制粘贴token啦~
要是可以只要调用一下登录接口,返回的token就自动添加进去,自动授权,那该多好啊~
Let's go!
第一步:添加 custom.js 文件


  • 在 webapi 的项目中添加wwwroot文件夹;
  • 新建custom.js文件到wwwroot/swagger-ui/目录下,目录没有自己建,当然js文件名自己随便取;
  • 编辑custom.js文件内容:
  1. console.log("Custom JS has been loaded and executed.");  
  2. const originalFetch = window.fetch;  
  3.   
  4. window.fetch = function(...args) {  
  5.     const [resource, config] = args;  
  6.   
  7.     return originalFetch.apply(this, args).then(response => {  
  8.         // 检查请求的 URL        
  9.         const requestUrl = new URL(response.url, window.location.origin).pathname;  
  10.         if (requestUrl.endsWith("/login")) {  
  11.             // 克隆响应以便读取  
  12.             response.clone().json().then(data => {  
  13.                 const token = data.result.token;  
  14.                 if (token) {  
  15.                     console.log("Token received via fetch override:", token);  
  16.                     authorizeSwagger(token);  
  17.                 } else {  
  18.                     console.warn("Token not found in login response.");  
  19.                 }            
  20.             }).catch(err => {  
  21.                     console.error("Failed to parse login response:", err);  
  22.             });        
  23.         }        
  24.         return response;  
  25.     });
  26. }
  27.   
  28. // 定义授权函数  
  29. function authorizeSwagger(token) {  
  30.     const bearerToken = 'Bearer ' + token;  
  31.     console.log("Setting Swagger UI Authorization with token:", bearerToken);  
  32.     if (window.ui && window.ui.authActions) {  
  33.         window.ui.authActions.authorize({  
  34.             Bearer: {  
  35.                 name: 'Bearer',  
  36.                 schema: {  
  37.                     type: 'apiKey',  
  38.                     in: 'header',  
  39.                     name: 'Authorization',  
  40.                     description: '',  
  41.                     },               
  42.                     value: bearerToken,  
  43.                 }        
  44.         });        
  45.         console.log("Authorization set successfully");  
  46.     } else {  
  47.         console.warn("Swagger UI authActions not available yet.");  
  48.     }
  49. }
  50.    
复制代码
第二步:启用静态文件服务

在Program.cs 中,启用静态文件服务;
  1. var app = builder.Build();
  2. // 启用静态文件服务
  3. app.UseStaticFiles();
复制代码
第三步:SwaggerUI 中心件中注入 js 脚本

使用InjectJavascript的方式将上面的custom.js注入到SwaggerUI中心件中。
  1. // 启用Swagger  
  2. app.UseSwagger();  
  3. app.UseSwaggerUI(options =>  
  4. {  
  5.     options.InjectJavascript("/swagger-ui/custom.js");  
  6.     options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");  
  7. });
复制代码
OK!
大家快来试试吧~


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表