作为后端开发,进行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文件内容:

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 中,启用静态文件服务;

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!

大家快来试试吧~

Swagger 调试,我不想再复制粘贴token啦~的更多相关文章

  1. ueditor编辑文章时候,复制粘贴内容,原来的图片不能显示

    ueditor编辑文章时候.当现有文章有图片的时候, 再复制粘贴文本进去的时候.里面的图片就不能显示了, 编辑器查看文章Html代码,图片路径显示为:src="http://localhos ...

  2. xshell的快捷复制粘贴设置

    今天试着用xshell连接Linux,运行一些命令的时候想快点复制粘贴实现效率,却发现还要右键选择复制,再右键选择粘贴,很是麻烦. 看了一下xshell的设置,其实可以自己设置成快捷方式 以xshel ...

  3. jQuery event的复制粘贴的坑

    jQuery为了兼容性会把系统暴露出来的event重新整理一遍,但是复制粘贴的event就被丢掉了. 所以要在所有原生浏览器想实现复制粘贴,大家都用flash实现了.其实只要用原生的方法捕获事件就ok ...

  4. 个人永久性免费-Excel催化剂功能第82波-复制粘贴按源区域大小自动扩展收缩目标区域

    日常工作中,复制粘贴的操作,永远是最高频的操作,没有之一,在最高频的操作上,进行优化,让过程更智能,比一天到晚鼓吹人工智能替换人的骇人听闻的新闻来得更实际.此篇带来一点点的小小的改进,让日后无数的复制 ...

  5. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  6. Android中的复制粘贴

    Android中的复制粘贴 The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的 ...

  7. 不注册COM在Richedit中使OLE支持复制粘贴

    正常情况下在Richedit中使用OLE,如果需要OLE支持复制粘贴,那么这个OLE对象必须是已经注册的COM对象. 注册COM很简单,关键问题在于注册时需要管理员权限,这样一来,如果希望APP做成绿 ...

  8. 三星手机 Samsung Galaxy S3 无法复制粘贴的不完美解决方法

    问题简单描述 从上周开始我的Samsung Galaxy S3手机就无法实现复制粘贴功能了,每次复制时都提示复制到了剪贴板,但是粘贴时就会发现根本粘贴不了,无法打开剪贴板.真的是莫明其妙啊,我的手机没 ...

  9. VIM复制粘贴大全!

    原文地址:http://lsong17.spaces.live.com/blog/cns!556C21919D77FB59!603.entry 内容: 用vim这么久 了,始终也不知道怎么在vim中使 ...

  10. Android Studio 复制粘贴图片到drawable文件夹没有效果 - 解决方法

    我想放一些图片到drawable文件夹里面,但是简单的复制文件,粘贴文件,或者拖拽文件,都不起作用.不知道为什么,之前是可以的,突然就不行了. 解决方案 在drawable文件夹的目录上右键,选择Re ...

随机推荐

  1. LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践

    1.背景 本qiang~这两周关注到一个很火的开源文档问答系统Kotaemon,从8月28日至今短短两周时间,github星标迅猛增长10K,因此计划深挖一下其中的原理及奥秘. 本篇主要是Kotaem ...

  2. chatGPT能做职业规划?看完之后发现3年软测白做了!

    "每天都是重复.单调的工作,收入不理想,想跳槽无力,学习又没有动力和方向,不知道未来的发展在哪里,甚至想转行·····" 做测试久了,很多人都有诸如此类的疑惑,不想一直停留在测试需 ...

  3. YAML 文件基本语法格式(十四)

    一.YAML 文件基本语法格式 前面我们得 Kubernetes 集群已经搭建成功了,现在我们就可以在集群里面来跑我们的应用了.要在集群里面运行我们自己的应用,首先我们需要知道几个概念. 第一个当然就 ...

  4. JSP+Java编程资源

    <JSP+Servlet+Tomcat应用开发从零开始学(第2版)>源码课件视频下载地址: https://pan.baidu.com/s/1HkFRul3wYBxe-skXCoQPwg ...

  5. php中的跳转

    php中的跳转 header("refresh:3;url=http://www.baidu.com";); <meta http-equiv='refresh' conte ...

  6. AI网关在应用集成中起到什么作用?

    现在,国内外几乎每个SaaS服务商都找到办法把大型语言模型(LLM)集成到自己的产品里.印证了那句话"每款SaaS都值得用AI重做一遍"我们暂且不讨论是否值得用AI重做,但是增加A ...

  7. 云原生周刊:2024 年 K8s 基准报告 | 2024.4.8

    开源项目推荐 Argo CD Image Updater Argo CD Image Updater 是一个自动更新 Argo CD 管理的 Kubernetes 工作负载容器镜像的工具.简而言之,它 ...

  8. 云原生周刊:Dapr v1.11 发布

    开源项目推荐 Kamaji Kamaji 可以大规模地部署和运行 Kubernetes 控制平面,而只需承担一小部分操作负担.Kamaji 的特别之处在于,控制平面组件是在一个单一的 pod 中运行, ...

  9. 在 KubeSphere 中开启新一代云原生数仓 Databend

    作者:尚卓燃(https://github.com/PsiACE),Databend 研发工程师,Apache OpenDAL (Incubating) PPMC. 前言 Databend 是一款完全 ...

  10. Games 101 作业1

    1 坐标系 关于坐标系,坐标系其实就是空间信息.有了坐标系我们可以非常详细的描述这个世界,为了方便一般为一个观测者生成一个坐标系. 坐标系以观测者所在的位置为原点.就像我们常说的前面三米,我们对世界的 ...