ASP.NET Core 1.1 WebAPI:为控制器配置独立Swagger UI URL
实现专属Swagger UI独立URL的方案
当然可以实现这个需求!针对你的.NET Core 1.1 WebAPI项目,我们可以通过配置Swashbuckle中间件,为每个控制器分组生成独立的Swagger UI访问地址,彻底避免同一个UI里切换分组的混淆问题。下面是具体的实现步骤:
1. 确认Swashbuckle版本适配
因为你用的是.NET Core 1.1,需要安装对应版本的Swashbuckle.AspNetCore NuGet包,建议选择1.x系列(比如1.1.0),可以通过Package Manager Console执行:
Install-Package Swashbuckle.AspNetCore -Version 1.1.0
2. 配置Swagger文档生成规则
在Startup.cs的ConfigureServices方法中,为每个控制器分组定义独立的Swagger文档,并关联GroupName特性:
using Swashbuckle.AspNetCore.Swagger; using System.Reflection; // 其他必要引用 public void ConfigureServices(IServiceCollection services) { // 添加WebAPI服务 services.AddMvc(); // 配置Swagger生成器 services.AddSwaggerGen(c => { // 为第一个控制器分组创建文档 c.SwaggerDoc("user-api", new Info { Title = "用户管理API", Version = "v1", Description = "专属的用户操作接口文档" }); // 为第二个控制器分组创建文档 c.SwaggerDoc("order-api", new Info { Title = "订单管理API", Version = "v1", Description = "专属的订单操作接口文档" }); // 关联GroupName特性与Swagger文档 c.DocInclusionPredicate((docName, apiDesc) => { if (!apiDesc.TryGetMethodInfo(out MethodInfo methodInfo)) return false; // 获取控制器上的GroupName特性值 var groupName = methodInfo.DeclaringType .GetCustomAttributes<GroupNameAttribute>() .FirstOrDefault()?.Name; // 匹配当前文档名称与分组名称 return groupName == docName; }); }); }
注意:这里的"user-api"、"order-api"要和你控制器上[GroupName("user-api")]的特性值完全一致。
3. 配置独立的Swagger UI端点
在Startup.cs的Configure方法中,为每个分组单独配置Swagger UI的访问路径,替代原来单一的UI配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 启用Swagger文档端点 app.UseSwagger(); // 配置用户API的专属Swagger UI app.UseSwaggerUI(c => { c.RoutePrefix = "swagger/user-api"; // 专属URL路径 c.SwaggerEndpoint("/swagger/user-api/swagger.json", "用户管理API"); // 可以关闭分组下拉菜单,因为这是专属UI c.DefaultModelsExpandDepth(-1); // 可选:隐藏模型区域,更简洁 }); // 配置订单API的专属Swagger UI app.UseSwaggerUI(c => { c.RoutePrefix = "swagger/order-api"; // 专属URL路径 c.SwaggerEndpoint("/swagger/order-api/swagger.json", "订单管理API"); c.DefaultModelsExpandDepth(-1); // 可选配置 }); // (可选)保留原有的主Swagger UI(如果需要) // app.UseSwaggerUI(c => // { // c.RoutePrefix = "swagger"; // c.SwaggerEndpoint("/swagger/user-api/swagger.json", "用户管理API"); // c.SwaggerEndpoint("/swagger/order-api/swagger.json", "订单管理API"); // }); app.UseMvc(); }
4. 验证效果
配置完成后启动项目:
- 访问
/swagger/user-api会直接打开用户管理API的专属Swagger UI,没有其他分组的干扰 - 访问
/swagger/order-api会直接打开订单管理API的专属Swagger UI
这样你就可以给不同客户提供对应的专属链接,完全避免混淆了。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

