首页 > 解决方案 > 如何在 Swagger 中为每个控制器创建一个新地址

问题描述

我有两个控制器叫做TestControllerand Test2Controller。我怎么能大摇大摆地让这两个控制器有 2 个单独的 url,例如TestController它的地址是 baseurl/docs/test/index.htmlTest2Controller地址是 baseurl/docs/test2/index.html

测试控制器:

[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "Test")]
public class TestController : ControllerBase
{
    [ApiExplorerSettings(IgnoreApi = false)]
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

测试2控制器:

[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "Test2")]
public class Test2Controller : ControllerBase
{
    [ApiExplorerSettings(IgnoreApi = false)]
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

启动.cs

public void ConfigureServices(IServiceCollection services)
{
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("Test", new OpenApiInfo());
            c.SwaggerDoc("Test2", new OpenApiInfo());
        }
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
     app.UseSwagger();
     app.UseSwaggerUI(c =>
     {
         c.SwaggerEndpoint("/swagger/Test/swagger.json", "Test");
         c.SwaggerEndpoint("/swagger/Test2/swagger.json", "Test2");
     });
}

在此处输入图像描述

标签: c#apiasp.net-corecontrollerswagger

解决方案


没有直接的方法可以实现您提到的 URL 路由。但是,您可以对它们进行分组,并为 2 个不同的控制器提供不同的 Swagger 文档。请按照以下步骤操作:

第 1 步:在 ApiExplorer 设置中对控制器进行分组,如下所示,并给出组名。

''--- Controller 1
    [Route("api/[controller]")]
    [ApiExplorerSettings(GroupName = "test1")]
    public class TestController1 : Controller
    {
        // GET: api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
     }

''--- Controller 2
[Route("api/[controller]")]
    [ApiExplorerSettings(GroupName = "test2")]
    public class TestController2 : Controller
    {
        // GET: api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
     }

Step2:在startup.cs的ConfigureServices的AddSwaggerGen中添加两个swagger文档

                services.AddSwaggerGen(c => {
                c.SwaggerDoc("test1", new OpenApiInfo
                {
                    Title = "test1",
                    Version = "v1"
                });
                c.SwaggerDoc("test2", new OpenApiInfo
                {
                    Title = "test2",
                    Version = "v2"
                });
            });

步骤 3:配置 AddSwaggerUI 端点

            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/test1/swagger.json", "test1");
                c.SwaggerEndpoint("/swagger/test2/swagger.json", "test2");
            });

完成此配置后,当您使用 https://baseurl/swagger 运行 Swagger 文档时,您将在右上角看到 2 个选项来选择定义 在此处输入图像描述

您现在可以使用以下 URL 访问控制器特定的 swagger 文档

https://baseurl/swagger/index.html?urls.primaryName=test1 -- test controller1  
https://baseurl/swagger/index.html?urls.primaryName=test2 -- test controller2

同样,要访问 Swagger json 文件,请使用以下 URL

https://baseurl/swagger/test1/swagger.json -- test controller1
https://baseurl/swagger/test2/swagger.json -- test controller2

推荐阅读