.NET Core动态构建Swagger:选中单API时仅展示其Swagger页面
需求说明
我有一个API列表,当选中其中某一个API时,希望仅展示该API对应的Swagger页面。

实现步骤
1. 给API分组
在每个控制器上添加[ApiExplorerSettings(GroupName = "分组名称")]特性,把不同API归类到对应分组:
[ApiController] [Route("api/users")] [ApiExplorerSettings(GroupName = "用户管理API")] public class UsersController : ControllerBase { // 你的API方法 } [ApiController] [Route("api/orders")] [ApiExplorerSettings(GroupName = "订单管理API")] public class OrdersController : ControllerBase { // 你的API方法 }
2. 修改Program.cs中的Swagger配置
更新Swagger和SwaggerUI配置,让它按分组生成独立文档,并提供分组选择功能:
if (app.Environment.IsDevelopment()) { app.UseSwagger(options => { // 自定义Swagger文档路由格式,每个分组对应独立的JSON文件 options.RouteTemplate = "swagger/{documentName}/swagger.json"; }); // 获取系统中所有API分组 var apiGroups = app.Services.GetRequiredService<IApiDescriptionGroupCollectionProvider>() .ApiDescriptionGroups.Items.Select(g => g.GroupName); app.UseSwaggerUI(options => { // 为每个分组添加Swagger文档端点 foreach (var groupName in apiGroups) { options.SwaggerEndpoint($"/swagger/{groupName}/swagger.json", groupName); } // 开启深度链接,选中分组后URL会保留状态,刷新页面不会重置 options.EnableDeepLinking(); }); }
效果说明
配置完成后,SwaggerUI顶部会出现下拉菜单,显示所有定义的API分组。选中某个分组后,页面就只会展示该分组下的所有API文档,完全匹配需求。
内容的提问来源于stack exchange,提问作者Soheila
相关产品推荐
相关产品推荐

