文章正文

.NET8.0 使用学习(四)项目中使用配置Swagger,多版本配置

加入时间:2025/8/29 10:39:02

Program.cs代码内容,需要Nuget安装多个类库

dotnet add package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer   //这个会提示已弃用,实际上都在用,
dotnet add package Swashbuckle.AspNetCore.Annotations

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using System.Reflection;

var builder = WebApplication.CreateBuilder(args);


// 添加控制器服务.
builder.Services.AddControllers();


// ========== API 版本控制配置 ==========
builder.Services.AddApiVersioning(options =>
{
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
});
builder.Services.AddVersionedApiExplorer();
// ✅ 通过 Configure 配置 ApiExplorer 的选项
builder.Services.Configure<ApiExplorerOptions>(options =>
{
    options.GroupNameFormat = "'v'VVV";       // 例如 v1, v2
    options.SubstituteApiVersionInUrl = true; // 允许在 URL 中使用 {version}
});

// 添加 Swagger 服务.
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{

    // 获取所有 API 版本信息
    var provider = builder.Services.BuildServiceProvider()
        .GetRequiredService<IApiVersionDescriptionProvider>();

    foreach (var description in provider.ApiVersionDescriptions)
    {
        c.SwaggerDoc(
            description.GroupName, // 如 "v1", "v2"
            new Microsoft.OpenApi.Models.OpenApiInfo
            {
                Title = $"API 版本 {description.ApiVersion}",
                Version = description.ApiVersion.ToString()
            });
    }

    c.EnableAnnotations();


// 加载当前程序集的 XML 文档(即你的 /// 注释)
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    if (File.Exists(xmlPath))
    {
        c.IncludeXmlComments(xmlPath);
    }
});

var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(options =>
    {
        var provider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>();
        foreach (var description in provider.ApiVersionDescriptions)
        {
            options.SwaggerEndpoint(
                $"/swagger/{description.GroupName}/swagger.json",
                $"{description.GroupName.ToUpper()} 版本");
        }
    });
}
// Configure the HTTP request pipeline.

app.UseAuthorization();

app.MapControllers();

app.Run();
 

测试版本切换功能配合代码

OneController.cs中

  // v1 版本的控制器
  [ApiController]
  [ApiVersion("1.0")] // 声明支持 v1.0
  [Route("api/v{version:apiVersion}/[controller]")] // 路由中包含版本号
  public class OneController:ControllerBase
  {
      /// <summary>
      /// 版本1的测试
      /// </summary>
      /// <returns></returns>
      [HttpGet]
      public IActionResult Get()
      {
          return Ok(new { Message = "这是 API V1", Time = DateTime.Now });
      }

  }

OneControllerV2.cs中

    [ApiController]
    [ApiVersion("2.0")] // 声明支持 v2.0
    [Route("api/v{version:apiVersion}/[controller]")] // 路由中包含版本号
    public class OneControllerV2:ControllerBase
    {
        /// <summary>
        /// 版本2的测试
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(new { Message = "这是 API V2.0 的测试", Time = DateTime.Now });
        }
    }

运行起来访问/swagger/index.html

注意右上角下来菜单中的版本

字体大小[ ]

版权所有:有信心——uxinxin 我的个人网站欢迎常来!手机版(新站开启,请多多关照) 豫ICP备12017930号-1
 豫公网安备41910102000493号