如何将两个控制器拆分为两个 Swagger 定义

问题描述 投票:0回答:1

所以,我在 ASP.NET Web API 项目中制作了一个相当大的 API。我想有多个定义以确保分类器被正确分割,并在定义中使用标签。

在我的启动文件中,我执行以下操作:

services.AddSwaggerGen(d =>
        {
            d.SwaggerDoc("main", new OpenApiInfo
            {
                Title = "Main",
                Version = "v1",
                Description = "The main information",
                Contact = new OpenApiContact
                {
                    Name = "itsfinniii"
                }
            });

            d.SwaggerDoc("school", new OpenApiInfo
            {
                Title = "School",
                Version = "v1",
                Description = "School stuff",
                Contact = new OpenApiContact
                {
                    Name = "itsfinniii"
                }
            });

            d.DocInclusionPredicate((name, api) => true);
        });

然后,在我的 MainController.cs 中,我执行以下操作:

    [Route("api")]
    [Tags("Main Endpoints")]
    [ApiExplorerSettings(GroupName = "main")]
    [ApiController]
    public class MainController : ControllerBase
    {
        [HttpGet]
        [Route("alive")]
        [ApiExplorerSettings(GroupName = "v1")]
        [ProducesResponseType(StatusCodes.Status204NoContent)]
        public async Task<IActionResult> Alive()
        {
            return new NoContentResult();
        }
    }

在我的 SchoolController.cs 中,我执行以下操作:

    [Route("api/school")]
    [Tags("School Endpoints")]
    [ApiExplorerSettings(GroupName = "school")]
    [ApiController]
    public class MainController : ControllerBase
    {
        [HttpGet]
        [Route("hello-world")]
        [ProducesResponseType(StatusCodes.Status200OK)]
        public async Task<string> Alive()
        {
            return "Hello World!";
        }
    }

但是,两个标签和两个端点都出现在两个定义中。我怎样才能做到只有属于 main 的那些出现在 main 定义中,而不出现在其他任何地方,而属于 school 的那些只出现在 school 定义中?

asp.net-core swagger swashbuckle
1个回答
0
投票

尝试从您的启动中删除以下代码:

d.DocInclusionPredicate((name, api) => true);

此外,从您的主控制器 Alive() 中删除此行:

[ApiExplorerSettings(GroupName = "v1")]

在启动时,我指定一个或多个 Swagger 端点,例如:

 app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/main/swagger.json", "main");
                    c.SwaggerEndpoint("/swagger/school/swagger.json", "school");
                });

结果:

您可以阅读Swashbuckle.AspNetCore了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.