如何在 Swagger 中为每个控制器创建一个新地址

How to create a new address for each controller in Swagger

我有两个控制器,分别是 TestControllerTest2Controller。我怎么能大摇大摆地让这两个控制器出现在 2 个单独的 url 中,例如 TestController 它的地址是 baseurl/docs/test/index.html 对于 Test2Controllerbaseurl/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" };
    }
}

测试控制器:

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

StartUp.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");
     });
}

没有直接的方法可以实现您提到的 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 个选项 select 定义

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

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

同样,要访问 Swagger json 文件,请使用下面的 URLs

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