首页 > 其他分享 >netcore webapi网关项目swagger页面动态显隐

netcore webapi网关项目swagger页面动态显隐

时间:2022-09-28 10:14:07浏览次数:52  
标签:webapi 网关 显隐 app next swagger public 页面

在实际开发过程中,我们会遇到这么一个问题:

通常我们前后端分离开发,后端为前端提供一个swagger页面,做两者的对接联调,但是上线后,我们网关swagger是暴露在公网上的,即使我们已经在页面上增加了认证功能

但是我们还是不想把接口信息数据暴露出去,想在生产环境上隐藏,但是后端开发有个诉求:希望能够在生产环境出问题了的时候,使用swagger页面进行调试。

 

所以,我们希望能够在生产环境动态显示隐藏swagger页面

 

1.通过配置文件开关控制

可以使用远程配置文件,上面增加一个开发项,如果上了k8s,直接在k8s 的config map里面配置即可

2.通过filter去拦截

不同于java,java可以使用serverlet自带的authorization filter过滤器可以满足每次请求网关域名时进行拦截判断,netcore的五大过滤器中也包含authorization filter,但是这个过滤器在单纯请求网关域名时是触发不到的

这里参考五大过滤器模型:

 

 既然优先级最高的authorization filter都拦截不到,那么找优先级更高的,那就是middleware了

PS:使用interceptor也可以拦截请求,不过也是方法级别的(参考netcore里面的动态代理实现AOP)

 

3.自定义middleware

 

 public class HttpContextMiddleware
    {
        private readonly RequestDelegate _next;
        public HttpContextMiddleware(RequestDelegate next)
        {
            _next = next;
        }
        public async Task Invoke(HttpContext context)
        {
            IConfigurationManager config = (IConfigurationManager)context.Request.HttpContext.RequestServices.GetService(typeof(IConfigurationManager));

            string enableSwagger = config.GetConfig("application:enable-swagger");
            if (enableSwagger == "false")
            {
                return;
            }
            await _next(context);
        }
    }

    public static class MiddlewareExtensions
    {
        public static IApplicationBuilder UseHttpContextMiddleware(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<HttpContextMiddleware>();
        }
    }

  然后在startup里面调用即可

 public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseHttpContextMiddleware(); //引入自定义的HtppContextMiddleware中间件

            app.ConfigureCors();

            app.UseStaticFiles();

            app.UseSwagger();

            app.UseMvc();

            await app.UseOcelotByConfiguration();
        }

  这样,当我们的配置文件中false的时候,打开站点则是白页;设置为其他值true时则是显示swagger信息

标签:webapi,网关,显隐,app,next,swagger,public,页面
From: https://www.cnblogs.com/walt/p/16737019.html

相关文章

  • 前端面试总结10-WebApi-事件
    1.事件绑定通用函数(包括事件代理)functionbindEvent(elem,type,selector,fn){if(fn==null){fn=selector;selector=null;}elem.addEventListener(type,event=>{con......
  • 前端面试总结08-WebApi-Bom
    知识点:(1:navigator:识别浏览器类型  (2:sreen  (3:location:拆解url各个部分  (4:history ......
  • 前端面试总结08-WebApi-Dom
    1.Dom的本质:树结构(Dom树)   2.Dom常见获取结点操作(1:document.getElementById('');(2:document.getElementsByTagName('');//集合(3:document.getElementsByClassName......
  • NetCoreWebApi3.0-------MiniProfiler使用教程
    参考博客:ASP.NETCoreWebAPI中的分析工具MiniProfiler-LamondLu-博客园(cnblogs.com) 注意事项:1.不要盲目copy别人的代码varhtml=MiniProfiler.Current.Re......
  • 智能分析网关基于AI烟火识别技术的消防预警方案
    AI烟火识别是基于深度学习神经网络技术和视频智能分析的一项实用性技术,通过对监控区域内的烟雾和火焰进行精准检测与识别,并实时预警,有效协助工作人员及时处理消防危机。......
  • winform程序如何调用webapi接口?附源码
    我们开发winform程序时,通常使用传统的三层结构,包括:数据层、业务层、页面层。Form页面调用时,直接new个Service类,实现业务需求。但这种模式有个弊端,就是业务逻辑全部放到了客......
  • 如何在Windows上一键部署PaddleOCR的WebAPI服务
    PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。官方​开源项目地址:PaddlePaddle/PaddleOCR:AwesomemultilingualOCRtoo......
  • Linux网关失效
    配置好网关后查看网关状态任然报错   解决方案:输入servicenetworkrestartservicenetworkrestart 出现【OK】的字样表示重启成功。 ......
  • 一文解读阿里云短信网关的云原生技术
    随通信行业不断的业务迭代,新的赛道为业务带来了新变化,生态合作和渠道的规模上量给系统带来了模式创新的同时,也带来了更大的压力。同时,国际站的地域环境和当地政策法规的因......
  • 分享一个便于使用且轻量级的webapi调试工具,Postman的chrome浏览器插件“Tabbed Postma
    分享一个便于使用且轻量级的webapi调试工具,Postman的chrome浏览器插件“TabbedPostman-RESTClient”https://chrome.google.com/webstore/detail/tabbed-postman-rest......