在 C#/.NET Core 的 Web API 中,Swagger 是一种用于生成和展示 API 文档的流行工具。通过使用 Swagger,我们可以更容易地理解和使用我们的 API。在复杂的项目中,往往需要按照模块和版本对 API 进行分组和排序,以便更好地管理和维护 API 文档。本文将介绍如何在 C#/.NET Core 的 Web API 中实现按模块和版本分组 Swagger。

1. 配置 Swagger 的基本步骤

首先,我们需要在项目中添加 Swagger 的支持。这可以通过 NuGet 包管理器来完成。执行以下命令来安装 Swashbuckle.AspNetCore 包:

dotnet add package Swashbuckle.AspNetCore

安装完成后,接下来需要在 Startup.cs 文件中进行配置。首先,在 ConfigureServices 方法中添加 Swagger 生成器:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    // 添加 Swagger 生成器
    services.AddSwaggerGen(options =>
    {
        options.SwaggerDoc("v1.0", new OpenApiInfo { Title = "My API", Version = "v1.0" });
        options.SwaggerDoc("v1.1", new OpenApiInfo { Title = "My API", Version = "v1.1" });
        // 更多版本可以继续添加
    });
}

在上面的代码中,我们定义了两个不同版本的 API 文档,分别是 v1.0v1.1

2. 创建 API 控制器并分组

我们可以通过使用 [ApiExplorerSettings] 特性来为控制器分组。以下是一个示例控制器,它属于 ModuleA 模块的 v1.0 版本:

using Microsoft.AspNetCore.Mvc;

namespace MyApi.Controllers.ModuleA
{
    [ApiExplorerSettings(GroupName = "v1.0")]
    [Route("api/v1.0/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetAllUsers()
        {
            return Ok(new string[] { "User1", "User2" });
        }
    }
}

另外,下面是一个属于 ModuleA 模块,但属于 v1.1 版本的控制器:

using Microsoft.AspNetCore.Mvc;

namespace MyApi.Controllers.ModuleA
{
    [ApiExplorerSettings(GroupName = "v1.1")]
    [Route("api/v1.1/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetAllUsers()
        {
            return Ok(new string[] { "UserA", "UserB", "UserC" });
        }
    }
}

通过这种方式,我们可以根据不同的版本对 API 控制器进行分组,从而在 Swagger UI 中实现模块和版本的区分。

3. 配置 Swagger 文档的显示顺序

接下来,您可能希望根据一定顺序显示 Swagger 文档。这可以通过实现 IComparer 接口来排序分组。

首先,创建一个自定义的排序类:

public class SwaggerGroupSorter : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // 自定义分组的顺序
        return string.Compare(x, y, StringComparison.Ordinal);
    }
}

然后在 Configure 方法中配置 Swagger UI,并使用我们的排序器:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 如果不是开发环境,则开启异常详细页面
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    // 启用 Swagger 中间件
    app.UseSwagger();

    app.UseSwaggerUI(options =>
    {
        options.SwaggerEndpoint("/swagger/v1.0/swagger.json", "My API v1.0");
        options.SwaggerEndpoint("/swagger/v1.1/swagger.json", "My API v1.1");
        options.RoutePrefix = string.Empty; // 设置为根路径
    });

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

这样设置后,Swagger UI 会根据我们自定义的顺序显示 API 分组。

4. 结论

通过上述步骤,我们成功地在 C#/.NET Core 的 Web API 中实现了 Swagger 的模块和版本分组,以及自定义排序。这对于大型项目的 API 管理和维护具有重要意义,使开发者和用户可以更方便地了解和使用 API。希望这篇文章能对你在项目中的应用有所帮助。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部