NetCoreAPI版本控制

NetCoreAPI版本控制

随着我们的APP运行的时间越来越久,功能也越来越复杂,我们经常会修改一些接口的入参以及输出参数,不同的APP版本会导致我们需要不同的API版本。在这篇文章中,我会分享一些我在开发API中解决版本控制的方法。

本片文章中项目的开发环境:

  • Visual Studio 2017

  • .Net Core 2.0 SDK

    使用Nuget安装Api版本控制库
    PM> Install-Package Microsoft.AspNetCore.Mvc.Versioning
修改Startup类

在Startup类的ConfigureService方法中添加以下代码。

services.AddApiVersioning(c => {
                c.AssumeDefaultVersionWhenUnspecified = true;
                //该属性设置为true就在请求链接中未设置版本时使用初始版本
                c.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1,0);
                //设置初始版本,ApiVersion的方法有多个重载,有兴趣可以多研究一下。
            });

ReportApiVersions 属性如果设置为true, 在Api请求的响应头部,会在返回的头中显示所有拥有的版本号,如下图

测试版本控制
namespace Test.API.Controllers
{
    //这里应该是Versioning插件将内联路由约束给重写了,不然我们无法使用apiVersion来作为约束的。想深入的话最好了解一下Netcore的路由约束。
    //里面不要有空格。
    [Route("api/v{v:apiVersion}/[controller]")]
    //之所以把路由写在这里是因为我们大部分API都需要版本控制,所以为了不用在每个类上写,我们就让所有的控制器都集成这个控制器,这样就会减去一些不必要的编码了。
    public class BaseController : Controller
    {
    }
}

namespace InsuranceMarketing.API.Controllers
{   
    //如果项目已经做了一部分了。初始版本可以不写上的。当然第二及以后版本需要加上。
    [ApiVersion("1.0"), ControllerName("TestVersion")]
    public class TestV1Controller : BaseController
    {
        [HttpGet, Route("Version")]
        public string GetTest()
        {
            return "我是V1版本"; 
        }
    }
}
namespace InsuranceMarketing.API.Controllers
{
    //这里是版本控制,以及控制器的别名,为了让不同控制器的方法以版本的形式让路由找到。
    [ApiVersion("2.0"), ControllerName("TestVersion")]
    public class TestV2Controller : BaseController
    {
        //路由名称需写为同名
        [HttpGet, Route("Version")]
        public string GetTestV2()
        {
            return "我是V2版本";
        }
    }
}

现在我们来调用一下。

http://localhost:56650/api/v1.0/TestVersion/Version

http://localhost:56650/api/v2.0/TestVersion/Version

当然,版本控制还有其他方法像在url后面添加版本参数,或者在请求头中添加版本参数。这里就不细说了。
这是github:https://github.com/Microsoft/aspnet-api-versioning/wiki

猜你喜欢

转载自www.cnblogs.com/qingyanxiaochen/p/9967473.html
今日推荐