From e8ab6d47ebb58f861635c04b8553009978254c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 18 Aug 2023 08:31:30 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:swagger=E6=96=B0=E5=A2=9E=E5=88=86?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CommonController.cs | 2 + .../System/ArticleCategoryController.cs | 4 +- .../Controllers/System/ArticleController.cs | 4 +- .../System/CodeGeneratorController.cs | 9 ++-- .../System/CommonLangController.cs | 2 + .../Controllers/System/SysConfigController.cs | 2 + .../Controllers/System/SysDeptController.cs | 2 + .../System/SysDictDataController.cs | 2 + .../System/SysDictTypeController.cs | 2 + .../Controllers/System/SysFileController.cs | 12 ++---- .../Controllers/System/SysLoginController.cs | 5 ++- .../Controllers/System/SysMenuController.cs | 2 + .../Controllers/System/SysNoticeController.cs | 2 + .../Controllers/System/SysPostController.cs | 6 ++- .../System/SysProfileController.cs | 2 + .../Controllers/System/SysRoleController.cs | 2 + .../Controllers/System/SysUserController.cs | 2 + .../System/SysUserRoleController.cs | 2 + .../Controllers/System/TasksController.cs | 2 + .../Controllers/System/TasksLogController.cs | 8 ++-- .../System/monitor/MonitorController.cs | 7 +-- .../System/monitor/SqlDiffLogController.cs | 2 + .../System/monitor/SysLogininforController.cs | 2 + .../System/monitor/SysOperlogController.cs | 2 + .../System/monitor/SysUserOnlineController.cs | 2 + .../Extensions/SwaggerExtension.cs | 40 ++++++++++++++++-- ZR.Admin.WebApi/wwwroot/data.xlsx | Bin 36729 -> 37039 bytes 27 files changed, 97 insertions(+), 32 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index f664c56..448896b 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -14,6 +14,8 @@ namespace ZR.Admin.WebApi.Controllers /// 公共模块 /// [Route("[controller]/[action]")] + [Tags("公共模块Common")] + [ApiExplorerSettings(GroupName = "sys")] public class CommonController : BaseController { private OptionsSetting OptionsSetting; diff --git a/ZR.Admin.WebApi/Controllers/System/ArticleCategoryController.cs b/ZR.Admin.WebApi/Controllers/System/ArticleCategoryController.cs index 77339a0..92836ca 100644 --- a/ZR.Admin.WebApi/Controllers/System/ArticleCategoryController.cs +++ b/ZR.Admin.WebApi/Controllers/System/ArticleCategoryController.cs @@ -11,6 +11,8 @@ namespace ZR.Admin.WebApi.Controllers /// 文章目录Controller /// [Route("article/ArticleCategory")] + [Tags("文章目录")] + [ApiExplorerSettings(GroupName = "article")] public class ArticleCategoryController : BaseController { /// @@ -59,7 +61,7 @@ namespace ZR.Admin.WebApi.Controllers public IActionResult GetArticleCategory(int CategoryId) { var response = _ArticleCategoryService.GetFirst(x => x.CategoryId == CategoryId); - + return SUCCESS(response); } diff --git a/ZR.Admin.WebApi/Controllers/System/ArticleController.cs b/ZR.Admin.WebApi/Controllers/System/ArticleController.cs index c71e4ac..55577ef 100644 --- a/ZR.Admin.WebApi/Controllers/System/ArticleController.cs +++ b/ZR.Admin.WebApi/Controllers/System/ArticleController.cs @@ -13,6 +13,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("article")] + [Tags("文章管理")] + [ApiExplorerSettings(GroupName = "article")] public class ArticleController : BaseController { /// @@ -32,7 +34,7 @@ namespace ZR.Admin.WebApi.Controllers /// /// [HttpGet("list")] - [ActionPermissionFilter(Permission = "system:article:list")] + [ActionPermissionFilter(RolePermi = "admin")] public IActionResult Query([FromQuery] ArticleQueryDto parm) { var response = _ArticleService.GetList(parm); diff --git a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs index 92187a7..f2fa216 100644 --- a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs +++ b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs @@ -1,8 +1,4 @@ -using Infrastructure; -using Infrastructure.Attribute; -using Infrastructure.Enums; -using Infrastructure.Extensions; -using Mapster; +using Infrastructure.Extensions; using Microsoft.AspNetCore.Mvc; using SqlSugar; using ZR.Admin.WebApi.Extensions; @@ -10,7 +6,6 @@ using ZR.Admin.WebApi.Filters; using ZR.CodeGenerator; using ZR.CodeGenerator.Model; using ZR.CodeGenerator.Service; -using ZR.Common; using ZR.Model; using ZR.Model.System.Dto; using ZR.Model.System.Generate; @@ -23,6 +18,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("tool/gen")] + [Tags("代码生成CodeGenerator")] + [ApiExplorerSettings(GroupName = "sys")] public class CodeGeneratorController : BaseController { private readonly CodeGeneraterService _CodeGeneraterService = new CodeGeneraterService(); diff --git a/ZR.Admin.WebApi/Controllers/System/CommonLangController.cs b/ZR.Admin.WebApi/Controllers/System/CommonLangController.cs index 092546c..ecbcf47 100644 --- a/ZR.Admin.WebApi/Controllers/System/CommonLangController.cs +++ b/ZR.Admin.WebApi/Controllers/System/CommonLangController.cs @@ -14,6 +14,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("system/CommonLang")] + [Tags("多语言配置CommonLang")] + [ApiExplorerSettings(GroupName = "sys")] public class CommonLangController : BaseController { /// diff --git a/ZR.Admin.WebApi/Controllers/System/SysConfigController.cs b/ZR.Admin.WebApi/Controllers/System/SysConfigController.cs index 82a3b44..494eda4 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysConfigController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysConfigController.cs @@ -14,6 +14,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("system/config")] + [Tags("系统配置SysConfig")] + [ApiExplorerSettings(GroupName = "sys")] public class SysConfigController : BaseController { /// diff --git a/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs b/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs index a1e6511..9c52a4b 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDeptController.cs @@ -13,6 +13,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/dept")] + [Tags("部门管理SysDept")] + [ApiExplorerSettings(GroupName = "sys")] public class SysDeptController : BaseController { public ISysDeptService DeptService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs b/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs index a1f835f..4bb7124 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDictDataController.cs @@ -13,6 +13,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/dict/data")] + [Tags("字典数据SysDictData")] + [ApiExplorerSettings(GroupName = "sys")] public class SysDictDataController : BaseController { private readonly ISysDictDataService SysDictDataService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs b/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs index 543b8e9..8df1454 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysDictTypeController.cs @@ -13,6 +13,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/dict/type")] + [Tags("字典数据类型SysDictType")] + [ApiExplorerSettings(GroupName = "sys")] public class SysDictTypeController : BaseController { private readonly ISysDictService SysDictService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs index 8900235..635aa1e 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs @@ -1,13 +1,9 @@ using Microsoft.AspNetCore.Mvc; using SqlSugar; -using Infrastructure.Attribute; -using Infrastructure.Enums; -using Infrastructure.Model; using ZR.Admin.WebApi.Filters; -using ZR.Common; using ZR.Model.System; -using ZR.Service.System.IService; using ZR.Model.System.Dto; +using ZR.Service.System.IService; namespace ZR.Admin.WebApi.Controllers { @@ -16,6 +12,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("tool/file")] + [Tags(" 文件存储SysFile")] + [ApiExplorerSettings(GroupName = "sys")] public class SysFileController : BaseController { /// @@ -37,15 +35,13 @@ namespace ZR.Admin.WebApi.Controllers [ActionPermissionFilter(Permission = "tool:file:list")] public IActionResult QuerySysFile([FromQuery] SysFileQueryDto parm) { - //开始拼装查询条件 var predicate = Expressionable.Create(); - //搜索条件查询语法参考Sqlsugar + predicate = predicate.AndIF(parm.BeginCreate_time != null, it => it.Create_time >= parm.BeginCreate_time); predicate = predicate.AndIF(parm.EndCreate_time != null, it => it.Create_time <= parm.EndCreate_time); predicate = predicate.AndIF(parm.StoreType != null, m => m.StoreType == parm.StoreType); predicate = predicate.AndIF(parm.FileId != null, m => m.Id == parm.FileId); - //搜索条件查询语法参考Sqlsugar var response = _SysFileService.GetPages(predicate.ToExpression(), parm, x => x.Id, OrderByType.Desc); return SUCCESS(response); } diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index 2f160a6..a66cc7f 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -16,6 +16,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// /// 登录 /// + [Tags("登录SysLogin")] + [ApiExplorerSettings(GroupName = "sys")] public class SysLoginController : BaseController { static readonly NLog.Logger logger = NLog.LogManager.GetLogger("LoginController"); @@ -157,6 +159,7 @@ namespace ZR.Admin.WebApi.Controllers.System /// /// /// + [ApiExplorerSettings(IgnoreApi = true)] public SysLogininfor RecordLogInfo(HttpContext context) { var ipAddr = context.GetClientUserIp(); @@ -194,7 +197,7 @@ namespace ZR.Admin.WebApi.Controllers.System { return ToResponse(ResultCode.CAPTCHA_ERROR, "验证码错误"); } - + SysUser user = sysUserService.Register(dto); if (user.UserId > 0) { diff --git a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs index da54b1b..73c1e9b 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysMenuController.cs @@ -12,6 +12,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("/system/menu")] + [Tags("菜单管理SysMenu")] + [ApiExplorerSettings(GroupName = "sys")] public class SysMenuController : BaseController { private readonly ISysRoleService sysRoleService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs b/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs index c5a5ef0..cb19c97 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs @@ -17,6 +17,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/notice")] + [Tags("系统通知SysNotice")] + [ApiExplorerSettings(GroupName = "sys")] public class SysNoticeController : BaseController { /// diff --git a/ZR.Admin.WebApi/Controllers/System/SysPostController.cs b/ZR.Admin.WebApi/Controllers/System/SysPostController.cs index b99d9e9..cf142be 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysPostController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysPostController.cs @@ -14,6 +14,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/post")] + [Tags("岗位管理SysPost")] + [ApiExplorerSettings(GroupName = "sys")] public class SysPostController : BaseController { private readonly ISysPostService PostService; @@ -68,7 +70,7 @@ namespace ZR.Admin.WebApi.Controllers.System throw new CustomException($"修改岗位{post.PostName}失败,岗位编码已存在"); } post.ToCreate(HttpContext); - + return ToResponse(PostService.Add(post)); } @@ -122,7 +124,7 @@ namespace ZR.Admin.WebApi.Controllers.System /// 岗位导出 /// /// - [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title= "岗位导出")] + [Log(BusinessType = BusinessType.EXPORT, IsSaveResponseData = false, Title = "岗位导出")] [HttpGet("export")] [ActionPermissionFilter(Permission = "system:post:export")] public IActionResult Export() diff --git a/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs b/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs index 144f2c1..ac6cacd 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs @@ -12,6 +12,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/user/profile")] + [Tags("个人中心SysProfile")] + [ApiExplorerSettings(GroupName = "sys")] public class SysProfileController : BaseController { private readonly ISysUserService UserService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs b/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs index e8fa8ba..974ad2d 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs @@ -13,6 +13,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/role")] + [Tags("角色管理SysRole")] + [ApiExplorerSettings(GroupName = "sys")] public class SysRoleController : BaseController { private readonly ISysRoleService sysRoleService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs index 5a7bde3..9b9ce33 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs @@ -15,6 +15,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/user")] + [Tags("用户管理SysUser")] + [ApiExplorerSettings(GroupName = "sys")] public class SysUserController : BaseController { private readonly ISysUserService UserService; diff --git a/ZR.Admin.WebApi/Controllers/System/SysUserRoleController.cs b/ZR.Admin.WebApi/Controllers/System/SysUserRoleController.cs index 90fc836..8640b97 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysUserRoleController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysUserRoleController.cs @@ -10,6 +10,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("system/userRole")] + [Tags("用户角色管理SysUserRole")] + [ApiExplorerSettings(GroupName = "sys")] public class SysUserRoleController : BaseController { private readonly ISysUserRoleService SysUserRoleService; diff --git a/ZR.Admin.WebApi/Controllers/System/TasksController.cs b/ZR.Admin.WebApi/Controllers/System/TasksController.cs index 8f8cf73..0f14d7a 100644 --- a/ZR.Admin.WebApi/Controllers/System/TasksController.cs +++ b/ZR.Admin.WebApi/Controllers/System/TasksController.cs @@ -16,6 +16,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("system/Tasks")] + [Tags("计划Tasks")] + [ApiExplorerSettings(GroupName = "sys")] public class TasksController : BaseController { private ISysTasksQzService _tasksQzService; diff --git a/ZR.Admin.WebApi/Controllers/System/TasksLogController.cs b/ZR.Admin.WebApi/Controllers/System/TasksLogController.cs index 115db6b..b4cee25 100644 --- a/ZR.Admin.WebApi/Controllers/System/TasksLogController.cs +++ b/ZR.Admin.WebApi/Controllers/System/TasksLogController.cs @@ -1,11 +1,7 @@ -using Infrastructure; -using Infrastructure.Attribute; -using Infrastructure.Enums; -using Infrastructure.Extensions; +using Infrastructure.Extensions; using Microsoft.AspNetCore.Mvc; using SqlSugar; using ZR.Admin.WebApi.Filters; -using ZR.Common; using ZR.Model; using ZR.Model.System; using ZR.Model.System.Dto; @@ -18,6 +14,8 @@ namespace ZR.Admin.WebApi.Controllers.System /// [Verify] [Route("/monitor/jobLog")] + [Tags("任务日志TasksLog")] + [ApiExplorerSettings(GroupName = "sys")] public class TasksLogController : BaseController { private readonly ISysTasksLogService tasksLogService; diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs index 4dc5009..a7c959c 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs @@ -1,11 +1,6 @@ -using Infrastructure; using Infrastructure.Extensions; -using Infrastructure.Model; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; -using System; using System.Diagnostics; using System.Runtime.InteropServices; @@ -14,6 +9,8 @@ namespace ZR.Admin.WebApi.Controllers.monitor /// /// 系统监控 /// + [Tags("系统监控Monitor")] + [ApiExplorerSettings(GroupName = "sys")] public class MonitorController : BaseController { private OptionsSetting Options; diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SqlDiffLogController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SqlDiffLogController.cs index effebc8..bcb8398 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SqlDiffLogController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SqlDiffLogController.cs @@ -11,6 +11,8 @@ namespace ZR.Admin.WebApi.Controllers /// [Verify] [Route("monitor/SqlDiffLog")] + [Tags("差异日志SqlDiffLog")] + [ApiExplorerSettings(GroupName = "sys")] public class SqlDiffLogController : BaseController { /// diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs index 9a93557..e613836 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SysLogininforController.cs @@ -13,6 +13,8 @@ namespace ZR.Admin.WebApi.Controllers.monitor /// [Verify] [Route("/monitor/logininfor")] + [Tags("登录日志SysLogininfor")] + [ApiExplorerSettings(GroupName = "sys")] public class SysLogininforController : BaseController { private ISysLoginService sysLoginService; diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs index 7b60848..e55588e 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SysOperlogController.cs @@ -11,6 +11,8 @@ namespace ZR.Admin.WebApi.Controllers.monitor /// [Verify] [Route("/monitor/operlog")] + [Tags("操作日志SysOperlog")] + [ApiExplorerSettings(GroupName = "sys")] public class SysOperlogController : BaseController { private ISysOperLogService sysOperLogService; diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs index 96a9674..015f877 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs @@ -8,6 +8,8 @@ namespace ZR.Admin.WebApi.Controllers.monitor { [Verify] [Route("monitor/online")] + [Tags("在线用户SysUserOnline")] + [ApiExplorerSettings(GroupName = "sys")] public class SysUserOnlineController : BaseController { private IHubContext HubContext; diff --git a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs index a4c12f9..4fc90af 100644 --- a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs +++ b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs @@ -1,7 +1,7 @@ -using Infrastructure; -using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.Filters; +using Swashbuckle.AspNetCore.SwaggerUI; using System.Reflection; namespace ZR.Admin.WebApi.Extensions @@ -33,7 +33,13 @@ namespace ZR.Admin.WebApi.Extensions }; }); }); - app.UseSwaggerUI(c => c.SwaggerEndpoint("v1/swagger.json", "ZrAdmin v1")); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("sys/swagger.json", "系统管理"); + c.SwaggerEndpoint("article/swagger.json", "文章管理"); + c.SwaggerEndpoint("v1/swagger.json", "business"); + c.DocExpansion(DocExpansion.None); //->修改界面打开时自动折叠 + }); } public static void AddSwaggerConfig(this IServiceCollection services) @@ -43,6 +49,20 @@ namespace ZR.Admin.WebApi.Extensions services.AddSwaggerGen(c => { + c.SwaggerDoc("sys", new OpenApiInfo + { + Title = "ZrAdmin.NET Api", + Version = "v1", + Description = "系统管理", + Contact = new OpenApiContact { Name = "ZRAdmin doc", Url = new Uri("https://www.izhaorui.cn/doc") } + }); + c.SwaggerDoc("article", new OpenApiInfo + { + Title = "ZrAdmin.NET Api", + Version = "v1", + Description = "文章管理", + Contact = new OpenApiContact { Name = "ZRAdmin doc", Url = new Uri("https://www.izhaorui.cn/doc") } + }); c.SwaggerDoc("v1", new OpenApiInfo { Title = "ZrAdmin.NET Api", @@ -94,6 +114,20 @@ namespace ZR.Admin.WebApi.Extensions new List() } }); + + //判断接口归于哪个分组 + c.DocInclusionPredicate((docName, apiDescription) => + { + if (docName == "v1") + { + //当分组为NoGroup时,只要没加特性的都属于这个组 + return string.IsNullOrEmpty(apiDescription.GroupName); + } + else + { + return apiDescription.GroupName == docName; + } + }); }); } } diff --git a/ZR.Admin.WebApi/wwwroot/data.xlsx b/ZR.Admin.WebApi/wwwroot/data.xlsx index 574ac2fe14e1b7072f609874f712e18cfad2fe8e..0fef28ea8e237de415cc63097c0f45a26027aecc 100644 GIT binary patch delta 21310 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 xL(xhh{||(rmEe5nh~c{vYL1eNg}a delta 20990 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

#4t8dvzwzrh4-KUQas&ud%|(Kn{~Mfw}$ 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