You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:18:18