.NET 6开发TodoList应用之实现API版本控制

 更新时间:2022年01月07日 08:55:56   作者:CODE4NOTHING  
API接口版本管理,对于一些规模稍大的企业应用来说,是经常需要关注的一大需求。本文将介绍在.NET 6开发中如何实现API版本控制,感兴趣的可以了解一下

需求

API接口版本管理,对于一些规模稍大的企业应用来说,是经常需要关注的一大需求。尽管我们的示例程序TodoList很简单,但是我们也可以通过这个应用程序,来实践一下如何管理API接口版本。

目标

实现API接口版本管理。

原理与思路

要实现API版本管理,我们需要这个库:Microsoft.AspNetCore.Mvc.Versioning。它提供了.NET Web项目接口的版本管理功能。

实现

添加Nuget Package并配置服务

向Api项目中添加Microsoft.AspNetCore.Mvc.Versioning包。并添加一个扩展方法:

ApiServiceExtensions.cs

using Microsoft.AspNetCore.Mvc;

namespace TodoList.Api.Extensions;

public static class ApiServiceExtensions
{
    public static void ConfigureApiVersioning(this IServiceCollection services)
    {
        services.AddApiVersioning(options =>
        {
            // 向响应头中添加API版本信息
            options.ReportApiVersions = true;
            // 如果客户端不显式指定API版本,则使用默认版本
            options.AssumeDefaultVersionWhenUnspecified = true;
            // 配置默认版本为1.0
            options.DefaultApiVersion = new ApiVersion(1, 0);
        });
    }
}

在Program中调用:

Program.cs

// 省略其他...
builder.ConfigureLog();
builder.Services.ConfigureApiVersioning();

实现API版本控制

方法1: 添加ApiVersion属性

我们复制一份TodoItemController到新文件TodoItemV2Controller并修改类名和构造函数,其他保持原样。为了给Controller标记对应的API版本号,我们分别向两个Controller上添加属性:

[ApiVersion("2.0")]
[Route("/todo-item")]
[ApiController]
public class TodoItemV2Controller : ControllerBase
{
    private readonly IMediator _mediator;
    // 省略其他...
}

以及

[ApiVersion("1.0")]
[Route("/todo-item")]
[ApiController]
public class TodoItemController : ControllerBase
{
    private readonly IMediator _mediator;
    // 省略其他..
}

验证1: 请求中不添加任何API版本相关字段

启动Api项目,执行查询TodoItem的请求:

请求

-** 响应**

日志输出:

结果返回:

以及响应头信息中包含的api-supported-versions

验证2: 请求中添加查询字符串api-version

启动Api项目,执行查询TodoItem的请求:

请求

响应

日志输出:

结果返回(可以自己尝试修改内部逻辑,这里我懒了没改实现,不过从日志已经能看出请求确实进入了V2版本的Controller):

以及响应头信息中包含的api-supported-versions

方法2: 通过请求头携带API版本信息

为了实现这一点,需要在ConfigureApiVersioning中增加配置:

ApiServiceExtensions.cs

// 省略其他...
// 指定请求头中携带用于指定API版本信息的字段
options.ApiVersionReader = new HeaderApiVersionReader("api-version");

验证3: 通过请求头携带API版本信息

启动Api项目,执行查询TodoItem的请求:

请求

响应日志输出:

返回结果就不继续贴了,以及响应头信息中包含的api-supported-versions

方法3: 通过URL路径访问对应的版本

除了这种之外的以上几种方法,都不需要修改接口的URI,而这种方式需要修改URI路径。我们在两个Controller上修改URI如下:

[ApiVersion("2.0")]
[Route("/{v:apiVersion}/todo-item")]
[ApiController]
// 省略其他...

验证4: 通过URI路径选择API版本

启动Api项目,执行查询TodoItem的请求:

请求

响应日志输出:

返回结果就不继续贴了,以及响应头信息中包含的api-supported-versions

一点扩展

有的时候我们需要标记一个版本的请求为deprecated,但是还不想完全删除这个Controller,可以用下面的方式进行标记,这样返回头中会指出这个版本的API已经处于deprecated状态了。

[ApiVersion("2.0", Deprecated = true)]
[Route("/{v:apiVersion}/todo-item")]
[ApiController]
// 省略其他...

或者在ConfigureApiVersioning中使用Convention进行标记:

// 省略其他...
// 使用Convention标记deprecated
options.Conventions.Controller<TodoItemV2Controller>().HasDeprecatedApiVersion(new ApiVersion(2, 0));

我们再请求2.0版本的API时,仍然可以获取数据,但是得到的返回头中信息如下:

对比使用Convention方式标记的返回头

总结

在本文中我们使用多种方式实现了管理API版本的需求,可以根据具体的需要选择一种进行实现。

以上就是.NET 6开发TodoList应用之实现API版本控制的详细内容,更多关于.NET 6实现API版本控制的资料请关注脚本之家其它相关文章!

相关文章

  • asp.net cookie清除的代码

    asp.net cookie清除的代码

    详细写出了asp.net下,cookies的清除代码
    2008-11-11
  • ASP.NET MVC使用JSAjaxFileUploader插件实现单文件上传

    ASP.NET MVC使用JSAjaxFileUploader插件实现单文件上传

    这篇文章介绍了ASP.NET MVC使用JSAjaxFileUploader插件实现单文件上传的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 为Visual Studio2019添加Git组件

    为Visual Studio2019添加Git组件

    这篇文章介绍了为Visual Studio2019添加Git组件的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • ASP.NET图片上传实例(附源码)

    ASP.NET图片上传实例(附源码)

    这篇文章主要介绍了一个ASP.NET图片上传实例,文章还为大家提供了ASP.NET图片自动上传和局部刷新显示的源码,希望大家喜欢
    2015-11-11
  • .NET 6新特性试用之Nuget包验证

    .NET 6新特性试用之Nuget包验证

    这篇文章主要介绍了.NET 6新特性试用之Nuget包验证,将.NET类库打包成Nuget包,以便多个项目公用,下面我们就来学习西还内容,详细资料需要的朋友可以参考下面文章
    2022-03-03
  • ASP.NET+XML打造网络硬盘原理分析

    ASP.NET+XML打造网络硬盘原理分析

    文件传送常用的三种方式:FTP、Email及网上邻居,都在一定程度上实现了文件数据的交流,但它们都主要面向“点对点”的传送,无法实现一块空间,资源互见的应用需求,这种基于点对多的共享模式需要寻求另外的传输途径,网络硬盘就是一种很好的解决方式
    2012-09-09
  • asp.net网站的404错误页面的正确设置方法

    asp.net网站的404错误页面的正确设置方法

    asp.net网站的404错误页面的正确设置方法,需要的朋友可以参考下。
    2010-05-05
  • 在 asp.net core 的中间件中返回具体的页面的实现方法

    在 asp.net core 的中间件中返回具体的页面的实现方法

    这篇文章主要介绍了在 asp.net core 的中间件中返回具体的页面的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • VS 2015开发跨平台手机应用的配置教程

    VS 2015开发跨平台手机应用的配置教程

    这篇文章主要给大家介绍了关于VS 2015开发跨平台手机应用配置的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • ASP.NET设计网络硬盘之两重要类代码

    ASP.NET设计网络硬盘之两重要类代码

    要进行“网络硬盘”功能设计,首先要熟悉.NET中处理文件和文件夹的操作。File类和Directory类是其中最主要的两个类。了解它们将对后面功能的实现提供很大的便利
    2012-10-10

最新评论