13版本控制 - ASP.NET Core WebAPI

发布于:2025-02-27 ⋅ 阅读:(116) ⋅ 点赞:(0)


前言

如果WebAPI做了版本升级或字段改变等操作后,又想老版本程序接口不受影响继续使用,该如何操作满足这个需求。


一、添加版本相关类

在Nuget中添加Microsoft.AspNetCore.Mvc.Versioning类库(现已弃用,可用新的包代替)。
在这里插入图片描述

二、新版本的字段和接口

1. 修改字段

新增新版本的字段(description),属性特性标记时不要使用required,不然会导致旧版本接口导入数据库时报错。直接手动实现一个判断该字段是否为空的方法,在ActionFilter中调用判断。

public string? Description { get; set; }
public bool ValidateDescription()
{
    return !string.IsNullOrEmpty(Description);
}

2. 实现和使用ActionFilter

实现ActionFilter类,在OnActionExecuting手动判断新增字段(description)是否存在

public class Shirt_EnsureDescriptionIsPresentFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);

        var shirt = context.ActionArguments["shirt"] as Shirt;
        if (shirt != null && !shirt.ValidateDescription())
        {
            context.ModelState.AddModelError("Shirt", "Descrition is required.");
            var problemDetails = new ValidationProblemDetails(context.ModelState)
            {
                Status = StatusCodes.Status400BadRequest
            };
            context.Result = new BadRequestObjectResult(problemDetails);
        }
    }
}

新建V2版本的接口,将判断Descption的字段特性标注到接口方法上。
在这里插入图片描述

3. 更新数据库

打开Nuget程序包管理器控制台,输入Add-Migration AddDescriptionToShirt命令,生成迁移代码。
在这里插入图片描述
再输入Update-Database命令执行代码,在数据库生成新增字段。
在这里插入图片描述

三、配置版本信息

在program.cs文件中添加版本配置信息。

builder.Services.AddApiVersioning(options =>
{
    // 没有版本信息配置时,会使用默认版本
    options.AssumeDefaultVersionWhenUnspecified = true;
    // 设置默认版本
    options.DefaultApiVersion = new ApiVersion(1, 0);
});

给控制器类添加版本号信息。
在这里插入图片描述
设置好这些信息后,访问接口时会启动默认版本接口V1.0。(当前打开swagger文档会报错)

四、使用Header信息访问其他版本接口

通过Header信息访问其他版本接口可以使用配置完成。

builder.Services.AddApiVersioning(options =>
{
    // 没有版本信息配置时,会使用默认版本
    options.AssumeDefaultVersionWhenUnspecified = true;
    // 设置默认版本
    options.DefaultApiVersion = new ApiVersion(1, 0);
    // 设置Header信息里的读取api版本的名称
    options.ApiVersionReader = new HeaderApiVersionReader("X-API-Version");
});

通过Postman在Header头信息添加,就可以访问指定版本接口。
在这里插入图片描述

五、记录接口版本

设置ReportApiVersions为true,则会在接口的响应头信息里记录接口支持的所有版本号。

builder.Services.AddApiVersioning(options =>
{
    // 记录Api版本
    options.ReportApiVersions = true;
    // 没有版本信息配置时,会使用默认版本
    options.AssumeDefaultVersionWhenUnspecified = true;
    // 设置默认版本
    options.DefaultApiVersion = new ApiVersion(1, 0);
    // 设置Header信息里的读取api版本的名称
    options.ApiVersionReader = new HeaderApiVersionReader("X-API-Version");
});

在这里插入图片描述

六、使用路由信息访问其他版本接口

将header信息读取api版本的配置注释

builder.Services.AddApiVersioning(options =>
{
    // 记录Api版本
    options.ReportApiVersions = true;
    // 没有版本信息配置时,会使用默认版本
    options.AssumeDefaultVersionWhenUnspecified = true;
    // 设置默认版本
    options.DefaultApiVersion = new ApiVersion(1, 0);
    // 设置Header信息里的读取api版本的名称
    // options.ApiVersionReader = new HeaderApiVersionReader("X-API-Version");
});

修改版本文件的Route信息,参数里增加版本参数
在这里插入图片描述
需要按照该路由形式访问

七、使用查询字符串访问其他版本接口

将Route修改为原来形式
在这里插入图片描述
在网址查询时,后面输入?api-version=2.0进行访问
在这里插入图片描述

八、Swagger文档支持版本控制

当前打开Swagger文档会报错,需要修复该文档显示。
在这里插入图片描述
在Nuget中安装Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer类库
在这里插入图片描述
配置信息
在这里插入图片描述
在这里插入图片描述
swagger页面可以正常显示,在接口里可以输入版本号,来调用不同版本接口。
在这里插入图片描述

九、Swagger文档支持多版本显示

配置信息
在这里插入图片描述
在这里插入图片描述
swagger页面可以正常显示两个版本的接口,点击切换即可。
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到