当前位置: 首页 > news >正文

.NETCORE中关于swagger的分组

有些时候我们的项目接口过多,就希望对应的swagger能够执行分组,网络上的几乎是千篇一律的分组方法,会累死!

这里提供一个更加高效的分组方法,比如你可以说哪些模块分到哪个组,哪些权限分到哪个组!

先上代码:

                    //添加文档options.SwaggerDoc("v1", new OpenApiInfo { Title = "基础的接口", Version = "v1" });options.SwaggerDoc("open", new OpenApiInfo { Title = "公开的接口", Version = "open" });options.SwaggerDoc("role", new OpenApiInfo { Title = "需要登陆的接口", Version = "role" });options.DocInclusionPredicate((doc, api) =>{if (!api.TryGetMethodInfo(out System.Reflection.MethodInfo method)){Console.WriteLine("not method!");return false;}//路径过滤,有时候我们基于其他模块的,可以基于路径屏蔽//return (description.RelativePath.Contains("/app/") || description.RelativePath.Contains("/plan/"));//查找Method的 也就是Action的var _api0 = method.GetCustomAttributes(true).OfType<TypeFilterAttribute>().ToList();foreach (var item in _api0){if (item.ImplementationType == typeof(RoleAttribute)){return doc == "role";}//item.Arguments //这个就是过滤器的参数了}//查找外部的 也就是Controller的if (method.ReflectedType != null){var _apix = method.ReflectedType.GetCustomAttributes(true).OfType<TypeFilterAttribute>().ToList();foreach (var item in _apix){if (item.ImplementationType == typeof(RoleAttribute)){return doc == "role";}}}//查找不是通过TypeFilter安装过滤器的var _api1 = method.GetCustomAttributes(true).OfType<RoleAttribute>().Count();if (_api1 > 0){return doc == "role";}if(doc == "role") { return false; }if(doc == "open") { return true; }//v1全部显示return doc == "v1";});

上面中,RoleAttribute是我自定义的过滤器,用于校验权限的,就是当前登陆者拥有哪些权限,我们一般用2个地方添加过滤器,一个是添加到Controller上,他的所有Action都会生效这个过滤器,一个是直接在Action上添加过滤器,其实还有一个是全局注入,不过我觉得那个很少用。

带参形式的过滤器

        [HttpPost][TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "root", "root" })]public async Task<string> AddChat(ChatItemAddDto input){return "发布成功";}

不带参数的过滤器

        [HttpPost][RoleAttribute]public async Task<string> ReadMessage(int roomid = 0, int uid = 0){return "";}

直接加入Controller里面的,他下面的所有Action都生效

    [ApiController][Route("/api/app/[controller]/[action]")][TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "data", "add" })]public class WorkerController : IBaseController{[HttpPost]public async Task<int> AddNeedWorker(NeedWorkerAddDto input){// ...return 1;}}

上面的文档判断其实还是有待改进的地方,不过留给大家自己折腾,毕竟需求不一样!

你可以按照过滤器的参数划分分组,也可以按照不同过滤器划分分组!

最后启用UI,代码如下

            app.UseAbpSwaggerUI(options =>{options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");options.SwaggerEndpoint("/swagger/open/swagger.json", "公开的接口");options.SwaggerEndpoint("/swagger/role/swagger.json", "需要登陆的接口");//options.DocExpansion(DocExpansion.None);//是否展开或者收缩});

看别人的都是通过

        [ApiExplorerSettings(GroupName ="v1")]

来划分的,虽然灵活,但是累啊!都已经用权限拆分了,还折腾这个分组干嘛呢!

相关文章:

.NETCORE中关于swagger的分组

有些时候我们的项目接口过多&#xff0c;就希望对应的swagger能够执行分组&#xff0c;网络上的几乎是千篇一律的分组方法&#xff0c;会累死&#xff01; 这里提供一个更加高效的分组方法&#xff0c;比如你可以说哪些模块分到哪个组&#xff0c;哪些权限分到哪个组&#xff…...

4.1011

目录 四次挥手中收到乱序的FIN包会如何处理&#xff1f; 在 TIME_WAIT 状态的 TCP 连接&#xff0c;收到 SYN 后会发生什么&#xff1f; 四次挥手中收到乱序的FIN包会如何处理&#xff1f; 如果FIN报文比数据包先道道客户端&#xff0c;此时FIN是一个乱序报文&#xff0c;此时…...

uniapp中引入axios的错误?

场景 在unaipp中使用axios npm i axios 下载完成后 然后在页面中使用 axios.get(“http://3000/searchS”) 然后报错 Adapter http’ is not available in the build 原因 在 UniApp 中使用 Axios 发送 HTTP 请求时&#xff0c;如果出现错误 “Adapter http’ is not available…...

Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法

Discuz!论坛发帖标题字数限制80字符修改方法 1.数据库修改2.修改JS验证字符数文件3.修改模板中写死的字符限制数4.修改函数验证文件5.修改语言包文件6.更新缓存 Discuz X3.4论坛网站帖子标题字数限制80字符&#xff0c;当我们想使用长标题的时候就得一删再删&#xff0c;实在是…...

R语言画样本不均衡组的箱线图

# 导入 ggplot2 包 library(ggplot2)# 示例数据框&#xff0c;包含数值数据和分组信息 data <- data.frame(Group c(rep("Group A",10), rep("Group B",15),rep("Group C",20)),Value c(rnorm(10, mean 10, sd 2),rnorm(15, mean 15, sd…...

ArcGIS学习总结(19)——要素转点与空间连接(属性表字段映射)

1.在新创建的面矢量数据的属性表中没有对应的字段信息&#xff0c;为了能够和有属性信息的数据进行匹配&#xff0c;使其具有对应字段的信息。 2.需要匹配的矢量文件属性表信息。 3.对新创建的矢量文件执行要素转点&#xff1a;数据管理工具→要素→要素转点。 4.选择分析工…...

【每日一题Day306】LC228汇总区间 | 双指针

汇总区间【LC228】 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范…...

vue中实现echarts三维散点图

需要安装 echarts 同时引入 echarts-gl 我安装的版本&#xff1a; "echarts": "^5.3.2", "echarts-gl": "^2.0.9", import Vue from "vue"; import * as echarts from "echarts"; Vue.prototype.$echarts echa…...

多头自注意力机制的代码实现

文章目录 1、自注意力机制2、多头注意力机制 transformer的整体结构&#xff1a; 1、自注意力机制 自注意力机制如下&#xff1a; 计算过程&#xff1a; 代码如下&#xff1a; class ScaledDotProductAttention(nn.Module):def __init__(self, embed_dim, key_size, value_…...

抽象工厂模式

目录 了解抽象工厂模式前的前置知识 什么是抽象工厂模式&#xff1f; 为什么要提出抽象工厂模式&#xff1f; 抽象工厂模式中的四大角色&#xff1f; 抽象工厂模式的优缺点&#xff1f; 抽象工厂模式的适用场景&#xff1f; 了解抽象工厂模式前的前置知识 在讲抽象工厂模式…...

登录校验-Filter-详解

目录 执行流程 拦截路径 过滤器链 小结 执行流程 过滤器Filter拦截到请求之后&#xff0c;首先执行方放行之前的逻辑&#xff0c;然后执行放行操作&#xff08;doFilter&#xff09;&#xff0c;然后会访问对应的Web资源&#xff08;对应的Controller类&#xff09;&#…...

堆栈方法区笔记记录

成员变量分两种: 1)实例变量:没有static修饰&#xff0c;属于对象&#xff0c;存储在堆中&#xff0c;有几个对象就有几份&#xff0c;通过对象点来访问 2)静态变量:由static修饰&#xff0c;属于类&#xff0c;存储在方法区中&#xff0c;只有一份&#xff0c;通过类名点来访…...

新版微信小程序获取用户手机号

小程序手机号验证组件有两种 手机号快速验证组件 //原生写法 <button open-type"getPhoneNumber" bindgetphonenumber"getPhoneNumber"></button>Page({getPhoneNumber (e) {console.log(e.detail.code)} })uniapp写法 <button open-type…...

CSS实践 —— 悬浮盒子阴影加上移效果

悬浮盒子阴影加上移效果 代码 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><style>body{background-color: #f5f5f5;}.shadow {width: 100px;height: 100px;margin:…...

安全测试基础知识

软件安全测试是评估和测试系统以发现系统及其数据的安全风险和漏洞的过程。没有通用术语&#xff0c;但出于我们的目的&#xff0c;我们将评估定义为分析和发现漏洞&#xff0c;而不尝试实际利用这些漏洞。我们将测试定义为发现和尝试利用漏洞。 安全测试通常根据要测试的漏洞…...

列表首屏毫秒级加载与自动滚动定位方案

引用自 摸鱼wiki 场景 <template><div ref"commentsRef"><divv-for"comment in displayComments":key"comment.id":data-cell-id"comment.id"class"card">{{ comment.data }}</div></div> &…...

小区物业业主管理信息系统设计的设计与实现(论文+源码)_kaic

摘 要 随着互联网的发展&#xff0c;网络技术的发展变得极其重要&#xff0c;所以依靠计算机处理业务成为了一种社会普遍的现状。管理方式也自然而然的向着现代化技术方向而改变&#xff0c;所以纯人工管理方式在越来越完善的现代化管理技术的比较之下也就显得过于繁琐&#x…...

Fortran 微分方程求解 --ODEPACK

最近涉及到使用Fortran对微分方程求解&#xff0c;我们知道MATLAB已有内置的函数&#xff0c;比如ode家族&#xff0c;ode15s&#xff0c;对应着不同的求解办法。通过查看odepack的官方文档&#xff0c;我尝试使用了dlsode求解刚性和非刚性常微分方程组。 首先是github网址&am…...

8路光栅尺磁栅尺编码器或16路高速DI脉冲信号转Modbus TCP网络模块 YL99-RJ45

特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 高速光栅尺磁栅尺4倍频计数&#xff0c;频率可达5MHz ● 模块可以输出5V的电源给光栅尺或传感器供电 ● 支持8个光栅尺同时计数&#xff0c;可识别正反转 ● 可以设置作为16路独立DI高速计数器 ● 可网…...

【Python】函数

None类型 思考&#xff1a;若函数没有使用return语句返回数据&#xff0c;那么函数有返回值吗&#xff1f; 答&#xff1a;实际上是有的&#xff0c;Python中有一个特殊的字面量None&#xff0c;其类型是<class ‘NoneType’>&#xff0c;无返回值的函数&#xff0c;实…...

AE图层操作全攻略:从剪辑拆分到对齐分布,新手必学的10个技巧

AE图层操作全攻略&#xff1a;从剪辑拆分到对齐分布&#xff0c;新手必学的10个技巧 第一次打开After Effects&#xff08;简称AE&#xff09;时&#xff0c;时间轴上密密麻麻的图层可能会让你感到无从下手。别担心&#xff0c;每个AE高手都曾经历过这个阶段。图层操作是AE中最…...

Qwen3-ASR-1.7B在金融领域的应用:电话客服质检分析系统

Qwen3-ASR-1.7B在金融领域的应用&#xff1a;电话客服质检分析系统 语音识别技术正在重塑金融客服质检的方式&#xff0c;让每一通电话都成为优化服务的契机。 1. 金融客服质检的现状与挑战 金融行业的电话客服每天要处理大量客户来电&#xff0c;涵盖业务咨询、投诉处理、产品…...

高效掌握R3nzSkin开源工具:从入门到精通的完整路径

高效掌握R3nzSkin开源工具&#xff1a;从入门到精通的完整路径 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL).Everyone is welcome to help improve it. 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 你是否正在寻找一款安全可靠的《…...

Win10下OpenCV4.5.2环境配置避坑指南:从下载到测试的完整流程

Win10下OpenCV4.5.2环境配置实战&#xff1a;从零到图像处理的完整指南 对于计算机视觉开发者来说&#xff0c;OpenCV无疑是最强大的工具之一。但在Windows系统上配置OpenCV环境&#xff0c;尤其是手动编译版本&#xff0c;常常会遇到各种"坑"。本文将带你完整走通Op…...

开源GUI编辑器lopaka发布V0.6版本,增加LVGL支持,同时支持 TFT_eSPI,U8g2,AdafruitGFX,Flipper Zero等

https://github.com/sbrin/lopaka?tabreadme-ov-file 更新记录&#xff1a; Lopaka 是一款开源图形编辑器&#xff0c;旨在为 TFT_eSPI、U8g2、AdafruitGFX 和 Flipper Zero 提供图形创建界面。它与 M5GFX、LovyanGFX、Watchy 等多种平台兼容。绘制任意图形&#xff0c;并将…...

UniApp+AI智能客服实战:从零构建高效对话系统的避坑指南

最近在做一个跨平台的智能客服项目&#xff0c;用UniApp来打主力。过程中踩了不少坑&#xff0c;也总结了一些实用的经验&#xff0c;今天就来聊聊怎么从零开始&#xff0c;在UniApp里构建一个既高效又稳定的AI对话系统。我们的目标是&#xff1a;响应快、不掉线、多端体验一致…...

时序数据库(社区版)TDengine TSDB(安装/Docker版本)

前言TDengine 的 Docker 版本 3.4.0.0 可以免费试用。你下载并运行的 Docker 镜像&#xff0c;对应的就是 TDetime 社区版&#xff0c;这个版本自带免费许可证&#xff0c;可以永久免费使用。推荐&#xff1a;当前广泛使用且较为稳妥的 TDengine Docker 版本&#xff1a;3.4.0.…...

02 python阶段大纲介绍

环境搭建安装python解释器 目的 解释python代码&#xff0c;例如print(“hello world”)版本 3.8x及以上版本安装Anaconda数据科学家 pythons解释器python库安装IDE工具 Pycharm , 版本必2023.x及以上基础语法 函数容器类型相关文件操作相关异常处理扩展—递归包和模块 项目 综…...

如何解决modelsim闪退

...

H3CNE--12.生成树协议

生成树协议 技术背景 如下图可以理解为是一个网状结构的网络&#xff0c;可靠性很高&#xff0c;挂了一根线&#xff0c;另一根可以正常用&#xff0c;但是会产生环路 给每台交换机添加两台PC&#xff0c;分别命名为A,B,C,D 此时如果两台交换机刚刚开机&#xff0c;A要和…...