写点什么

Swagger 通过拦截器(Interceptor)配置默认访问参数

作者:为自己带盐
  • 2022 年 2 月 09 日
  • 本文字数:801 字

    阅读完需:约 3 分钟

背景

最近在开发中遇到了一个使用场景,在我们的 rest 接口中,需要新增一个自定义的请求头,来标识一些关键信息(不涉及安全性),这个也很简单,只需要在框架的入口筛选器(Filter)中,验证指定的 header 就可以了(我这里还是以 dotnetcore webapi 框架为例)。

但这个对于客户端来说并不没有困难,只需要增加一个 header 参数就可以了,但在开发环境下,由于集成了 swagger 文档,所以就需要在 swaggerui 中也增加这个参数,才能更方便的测试接口效果。而怎么方便快速,以最小的成本来实现这个效果呢,就需要用到 swagger 的拦截器功能了。

实现

在使用拦截器之前,通常的做法是自定义一个 Filter 类,继承 swagger 的 IOperationFilter 接口,然后重写实现 Apply 方法,之后再将重载方法注入到 swagger 的配置当中(代码不列了)。

通用做法的好处就是自定义程度较高,可以实现丰富的功能,但坏处就是写的代码有点多。

有了拦截器后,这个操作就变得更加简单了,简直懒人福利。

只需要在 startup 里注入 swaggerui 的地方新增这样一句

app.UseSwaggerUI(c =>            {                c.SwaggerEndpoint("/swagger/v2/swagger.json", "英才计划接口");                c.SwaggerEndpoint("/swagger/v1/swagger.json", "人工智能接口");                //注入一个header参数,https://github.com/domaindrivendev/Swashbuckle.AspNetCore#use-client-side-request-and-response-interceptors                c.UseRequestInterceptor("(req) => {req.headers['uid'] = 'developer';return req;}");                            });
复制代码

即可实现同样的效果。

来看下效果图,在注入参数之前,访问指定接口,会直接被拦截,返回警告提示。

通过 postman 客户端增加 header 参数,则可以正常访问

而在配置好拦截器之后,就可以方便的在文档里调试了

可以看到,框架自动帮我们构造好了这个 header 请求。

好了,大概就这样,关于 swagger 更多的配置,可以看官方介绍

发布于: 刚刚阅读数: 4
用户头像

学着码代码,学着码人生。 2019.04.11 加入

狂奔的小码农

评论

发布
暂无评论
Swagger通过拦截器(Interceptor)配置默认访问参数