背景

Swagger是目前最受欢迎的REST APIs文档生成工具,同时也是API的在线测试工具。功能强大谁用谁知道。我就不用在这里推广它了。今天要解决的问题是:如果让一些特定的API接口在Swagger中不显示,即从Swagger中过滤掉一些不想展示的接口?通常我们使用Swagger都是通过指定要扫描的包或者扫描具有某些注解的Controller,来生成API,那么如果这其中还想过滤掉一些特定API怎么做呢?

实现方法

1、添加特性,隐藏swagger接口特性标识

  /// <summary>////// </summary>/// <param name="swaggerDoc"></param>/// <param name="context"></param>public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context){foreach (ApiDescription apiDescription in context.ApiDescriptions){if (apiDescription.TryGetMethodInfo(out MethodInfo method)){if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute))|| method.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute))){string key = "/" + apiDescription.RelativePath;if (key.Contains("?")){int idx = key.IndexOf("?", System.StringComparison.Ordinal);key = key.Substring(0, idx);}swaggerDoc.Paths.Remove(key);}}}}}

2、添加过滤器,自定义Swagger隐藏过滤器

  /// <summary>/// 隐藏swagger接口特性标识/// </summary>[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]public class HiddenApiAttribute : System.Attribute{}

3、修改SwaggerConfig,注入过滤器

#region Swaggerservices.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new Info{Version = "v1",Title = "接口文档",Description = "接口文档-基础",TermsOfService = "https://example.com/terms",Contact = new Contact{Name = "XXX1111",Email = "XXX1111@qq.com",Url = "https://example.com/terms"},License = new License{Name = "Use under LICX",Url = "https://example.com/license",}});c.SwaggerDoc("v2", new Info{Version = "v2",Title = "接口文档",Description = "接口文档-基础",TermsOfService = "https://example.com/terms",Contact = new Contact{Name = "XXX2222",Email = "XXX2222@qq.com",Url = "https://example.com/terms"},License = new License{Name = "Use under LICX",Url = "https://example.com/license",}});c.OperationFilter<HttpHeaderOperationFilter>();c.DocumentFilter<HiddenApiFilter>();var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);c.IncludeXmlComments(xmlPath);c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"CompanyName.ProjectName.ICommonServer.xml"));});#endregion Swagger

测试

   /// <summary>/// 检测帐号是不已存在/// </summary>/// <param name="account">(必填)帐号或手机号    Data=true 已存在,Data=false 不存在</param>/// <returns>测试</returns>[HttpGet, Route("existAccount")][ApiExplorerSettings(GroupName = "v2")]//[HiddenApi]public R<bool> ExistAccount([FromQuery] string account){return R<bool>.Suc(true);}

开源地址

https://github.com/conanl5566/Sampleproject/tree/master/src/03%20Host/CompanyName.ProjectName.HttpApi.Host

接口 Swagger 部分Web API的隐藏相关推荐

  1. .Net Core3.1下使用Swagger搭建web api项目

    前言:微软于前天发布.net core 3.1正式版,并将长期支持3.1.所以我听到这个消息后就急忙下载.net core 3.1的SDK和Runtime,应该是公司最先用3.1的攻城狮了????. ...

  2. python如何对接api接口_Python做Web API对接---查看接口

    3:Cookies(用户验证,基于HTTP协议的)之前的文章已经说了如何通过API登录验证,这里就不多说了,需要看的话,点击链接查看即可:https://club.kingdee.com/forum. ...

  3. 使用 Swagger UI 与 Swashbuckle 创建 RESTful Web API 帮助文件

    作者:Sreekanth Mothukuru 2016年2月18日 本文旨在介绍如何使用常用的 Swagger 和 Swashbuckle 框架创建描述 Restful API 的交互界面,并为 AP ...

  4. 鸿蒙开发访问webapi,Web API接口

    #e# 3.集合和分页的处理 在很多接口里面,我们都需要用到分页的处理,Web API也不例外,这样可以提交数据检索效率,减少服务器数据处理的压力,同时也提交客户端的数据显示速度. 一般的集合接口定义 ...

  5. ASP.NET Web API入门介绍(一)

    随着项目的复杂度越来越高,各种第三方系统的数据交互也越来越频繁,不可避免的就要用到Web API接口,这里Web API是一个比较宽泛的概念.本文提到Web API特指ASP.NET Web API. ...

  6. Web API路由和动作选择

    前言 本文描述ASP.NET Web API如何把一个HTTP请求路由到控制器的一个特定的Action上.关于路由的总体概述可以参见上一篇教程 http://www.cnblogs.com/aehyo ...

  7. 我所理解的RESTful Web API [设计篇]

    <我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...

  8. Web API应用架构设计分析(2)

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  9. 【ASP.NET Web API2】初识Web API

    Web Api 是什么? MSDN:ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务 百度百科:Web API是网络应用程序接口. ...

最新文章

  1. 思科将在网络中融入人工智能和机器学习
  2. matlab工作区保留或者清除部分变量
  3. android 短信时间排序,仿iphone中短信以及通话记录的时间显示
  4. java中遍历Map的方法
  5. 几个超级实用但很少人知道的 VS 技巧[更新]
  6. 模拟微信支付服务器测试,专栏 - 腾讯WeTest-All Test in WeTest
  7. oracle更改编码
  8. #nginx# 泛解析大量域名的情况下 将不带www的域名,301到与之对应的www前缀的域名...
  9. Saltstack-7:返回
  10. CDN——到底用还是不用?
  11. 银河麒麟V10共享文件夹内无法创建wps文件的解决方法
  12. 华为GPON设备ONU常见告警及处理
  13. Linux vi 替换字符串
  14. POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”
  15. jBox,实现批量查询
  16. Halcon 算子 circularity
  17. 怎么恢复360强力删除的文件?数据恢复这样做
  18. 收藏 |2019互联网安全与DDoS态势研究报告解读Pro版
  19. 【论文阅读】Long-term Temporal Convolutions for Action Recognition
  20. cms php vue 开源_lucms —— 基于 Vue 和 Laravel 开发的后台管理系统

热门文章

  1. JSP数据库连接方式总结
  2. iphone解锁_有人可以用解锁的iPhone做的最糟糕的事情是什么?
  3. 程序改变了命运,程序生活一天比一天好,对未来也充满了希望
  4. vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(十一)构思商品页面...
  5. java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR起因及解决办法
  6. Linux 内核中断内幕【转】
  7. IOZONE测试工具使用方法(转载)
  8. Zabbix RCE with API JSON-RPC
  9. 解决scrollViewDidScroll do not work的方法
  10. oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)