【问题标题】:How to use automatic variables in Swagger UI?如何在 Swagger UI 中使用自动变量?
【发布时间】:2023-01-18 17:46:53
【问题描述】:
在 Postman 中,我可以自动保存来自响应主体的变量。
例如:首先,我发送登录请求,作为响应,我得到accessToken 和refreshToken 变量。
然后通过邮递员测试脚本我保存这些变量:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("access_token", jsonData.accessToken);
postman.setEnvironmentVariable("refresh_token", jsonData.refreshToken);
这些变量会在下一个请求中自动更新:
问题是我如何在 Swagger UI 中做同样的事情?
问题是每次我需要手动编写刷新令牌时,默认情况下在 Swagger UI 中:
【问题讨论】:
标签:
asp.net-core
.net-core
swagger-ui
【解决方案1】:
@CodingMytra 回复你的评论我找到了解决方案。
通过添加这些 UseRequestInterceptor 和 UseResponseInterceptor 选项,accessToken 和 refreshToken 变量会自动更新。
app.UseSwaggerUI(swaggerUiOptions =>
{
var responseInterceptor = @"(res) =>
{
if(res.obj.accessToken)
{
console.log(res.obj.accessToken);
const token = res.obj.accessToken;
localStorage.setItem('token', token);
};
if(res.obj.refreshToken)
{
console.log(res.obj.refreshToken);
const refresh_token = res.obj.refreshToken;
localStorage.setItem('refresh_token', refresh_token);
};
return res;
}";
var requestInterceptor = @"(req) =>
{
req.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token');
req.headers['RefreshToken'] = localStorage.getItem('refresh_token');
return req;
}";
swaggerUiOptions.UseResponseInterceptor(Regex.Replace(responseInterceptor, @"s+", " "));
swaggerUiOptions.UseRequestInterceptor(Regex.Replace(requestInterceptor, @"s+", " "));
});
【解决方案2】:
对于纯 javascript,使用 responseInterceptor(获取令牌)和 requestInterceptor(设置令牌)函数。
见https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/
<script>
window.onload = () => {
window.ui = SwaggerUIBundle({
url: 'your_swagger_json.json',
defaultModelsExpandDepth: -1,
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
layout: "StandaloneLayout",
persistAuthorization: true,
responseInterceptor: function (response) {
if (response.obj.access_token) {
let swaggertoken = response.obj.access_token;
if (swaggertoken) {
localStorage.setItem("swaggertoken", swaggertoken)
};
};
return response;
},
requestInterceptor: function (request) {
request.headers.access_token = localStorage.getItem("swaggertoken");
return request;
},
});
};
</script>