接口 Swagger 部分Web API的隐藏
背景
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的隐藏相关推荐
- .Net Core3.1下使用Swagger搭建web api项目
前言:微软于前天发布.net core 3.1正式版,并将长期支持3.1.所以我听到这个消息后就急忙下载.net core 3.1的SDK和Runtime,应该是公司最先用3.1的攻城狮了????. ...
- python如何对接api接口_Python做Web API对接---查看接口
3:Cookies(用户验证,基于HTTP协议的)之前的文章已经说了如何通过API登录验证,这里就不多说了,需要看的话,点击链接查看即可:https://club.kingdee.com/forum. ...
- 使用 Swagger UI 与 Swashbuckle 创建 RESTful Web API 帮助文件
作者:Sreekanth Mothukuru 2016年2月18日 本文旨在介绍如何使用常用的 Swagger 和 Swashbuckle 框架创建描述 Restful API 的交互界面,并为 AP ...
- 鸿蒙开发访问webapi,Web API接口
#e# 3.集合和分页的处理 在很多接口里面,我们都需要用到分页的处理,Web API也不例外,这样可以提交数据检索效率,减少服务器数据处理的压力,同时也提交客户端的数据显示速度. 一般的集合接口定义 ...
- ASP.NET Web API入门介绍(一)
随着项目的复杂度越来越高,各种第三方系统的数据交互也越来越频繁,不可避免的就要用到Web API接口,这里Web API是一个比较宽泛的概念.本文提到Web API特指ASP.NET Web API. ...
- Web API路由和动作选择
前言 本文描述ASP.NET Web API如何把一个HTTP请求路由到控制器的一个特定的Action上.关于路由的总体概述可以参见上一篇教程 http://www.cnblogs.com/aehyo ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- Web API应用架构设计分析(2)
在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...
- 【ASP.NET Web API2】初识Web API
Web Api 是什么? MSDN:ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务 百度百科:Web API是网络应用程序接口. ...
最新文章
- 思科将在网络中融入人工智能和机器学习
- matlab工作区保留或者清除部分变量
- android 短信时间排序,仿iphone中短信以及通话记录的时间显示
- java中遍历Map的方法
- 几个超级实用但很少人知道的 VS 技巧[更新]
- 模拟微信支付服务器测试,专栏 - 腾讯WeTest-All Test in WeTest
- oracle更改编码
- #nginx# 泛解析大量域名的情况下 将不带www的域名,301到与之对应的www前缀的域名...
- Saltstack-7:返回
- CDN——到底用还是不用?
- 银河麒麟V10共享文件夹内无法创建wps文件的解决方法
- 华为GPON设备ONU常见告警及处理
- Linux vi 替换字符串
- POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”
- jBox,实现批量查询
- Halcon 算子 circularity
- 怎么恢复360强力删除的文件?数据恢复这样做
- 收藏 |2019互联网安全与DDoS态势研究报告解读Pro版
- 【论文阅读】Long-term Temporal Convolutions for Action Recognition
- cms php vue 开源_lucms —— 基于 Vue 和 Laravel 开发的后台管理系统
热门文章
- JSP数据库连接方式总结
- iphone解锁_有人可以用解锁的iPhone做的最糟糕的事情是什么?
- 程序改变了命运,程序生活一天比一天好,对未来也充满了希望
- vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(十一)构思商品页面...
- java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR起因及解决办法
- Linux 内核中断内幕【转】
- IOZONE测试工具使用方法(转载)
- Zabbix RCE with API JSON-RPC
- 解决scrollViewDidScroll do not work的方法
- oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)