版本化ASP.NET Core WebApi

简介: 版本化ASP.NET Core WebApi

大部分使用Web API的网站都会使用版本化Web API,这是因为当我们升级Web API的时候并不能保证所有的客户端使用的都是最新的Web API,有些旧版本的客户端很有可能使用的某个甚至某几个在新的Web API 中已经废除的接口。如果这时我们部署新的Web API的话,旧版本的客户端就无法使用了。因此Web API 的版本化就出来了。下面我们就来一步一步的实现Web API的版本化。


首先我们需要引如Microsoft.AspNetCore.Mvc.Versioning包,通过 Visual Studio的nuget安装即可。当包成功添加到项目之后,就需要在 Startup的ConfigureServices方法中将ApiVersioning注入到容器中,代码如下:

//more code
//...
using Microsoft.AspNetCore.Mvc.Versioning
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
      //more code
      //...
        services.AddControllers();
        //注入ApiVersioning
        services.AddApiVersioning();
        //more code
        //...
    }
}

上面的代码只不过是默认的方法,在实际项目中我们会对它做全局配置,代码如下:

//more code
//...
using Microsoft.AspNetCore.Mvc.Versioning
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
      //more code
      //...
        services.AddControllers();
        services.AddApiVersioning(p =>
        {
          //在请求的响应头部显示所有拥有的版本号
            p.ReportApiVersions = true;
            //在请求链接中未设置版本时使用默认版本
            p.AssumeDefaultVersionWhenUnspecified = true;
            //默认版本号
            p.DefaultApiVersion = new ApiVersion(1, 0);
        });
        //more code
        //...
    }
}

接下来就是使用版本号了,我们需要在Controller上面加上属性ApiViersion,并指定版本号,例如下面的代码:

[ApiVersion("2.0")]
[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        //more code
        //....
    }
}

从上面的代码中可以看出,我们在TestController控制器上标记了这个控制器的版本是2.0,那么我们要访问这个控制器的化就需要指定版本号,就像下面的连接那样:接下来如何访问呢?可以通过如下链接:http://localhost:3345/api/test?api-version=2.0


2.0版本的Get是有了,那么1.0的 Get呢?代码应该怎么写呢?一般来说在实际开发中会用两个命名空间来表示相应的版本号,例如下面这样的代码:

//1.0版本
namespace TestVersion.Controllers.v1
{
    [ApiVersion("1.0")]
    [ApiController]
    [Route("api/[controller]")]
    public class TestController : ControllerBase
    {
      [HttpGet]
      public IActionResult Get()
      {
          //more code
          //....
      }
    }
}
//2.0版本
namespace TestVersion.Controllers.v2
{
    [ApiVersion("2.0")]
    [ApiController]
    [Route("api/[controller]")]
    public class TestController : ControllerBase
    {
        [HttpGet]
      public IActionResult Get()
      {
          //more code
          //....
      }
    }
}

上面的代码解决了不同版本号的问题,但是这种方法并不完美,它不符合Restful规范,我们可以使用 路由指定版本号,下面就是修正后的代码:

[ApiVersion("2.0")]
[ApiController]
[Route("api/{version:apiVersion}/[controller]")]
public class TestController : ControllerBase
{
    [HttpGet]
 public IActionResult Get()
 {
     //more code
     //....
 }
}

在代码中,我们将 [Route(“api/[controller]”)] 修改为了成了 [Route(“api/{version:apiVersion}/[controller]”)],那么我们访问的时候地址将变为:http://localhost:3345/api/1.0/test


目录
相关文章
|
2月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
55 5
|
18天前
|
开发框架 数据可视化 .NET
.NET 中管理 Web API 文档的两种方式
.NET 中管理 Web API 文档的两种方式
34 14
|
2月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
59 1
|
3月前
|
开发框架 .NET 程序员
驾驭Autofac,ASP.NET WebApi实现依赖注入详细步骤总结
Autofac 是一个轻量级的依赖注入框架,专门为 .NET 应用程序量身定做,它就像是你代码中的 "魔法师",用它来管理对象的生命周期,让你的代码更加模块化、易于测试和维护
驾驭Autofac,ASP.NET WebApi实现依赖注入详细步骤总结
|
2月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
42 3
|
5月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
59 7
|
5月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
108 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
78 0
|
6月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
6月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
184 0