欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.netcore2.1 接口添加api-version版本控制

程序员文章站 2022-12-21 08:31:15
使用Guget 添加Microsoft.AspNetCore.Mvc.Versioning 包引用,由于我的.netcore是2.1版本,避免出现不兼容问题,版本添加我选的也是2.1版本 在Startup.cs中的 public void ConfigureServices(IServiceColl ......
  • 使用guget 添加microsoft.aspnetcore.mvc.versioning 包引用,由于我的.netcore是2.1版本,避免出现不兼容问题,版本添加我选的也是2.1版本

.netcore2.1  接口添加api-version版本控制

  • 在startup.cs中的  public void configureservices(iservicecollection services)添加如下代码
 services.addapiversioning(o =>
            {
                o.reportapiversions = true;
                o.assumedefaultversionwhenunspecified = true;
                o.defaultapiversion = new apiversion(2, 0); //设置默认版本
                //在请求头(http header)中使用版本控制,在查询字符串中指定版本号的方式将不再可用
                // o.apiversionreader = new headerapiversionreader("x-api-version");
                o.apiversionreader = apiversionreader.combine(new querystringapiversionreader(), //同时支持(http header)中使用版本控制,和查询字符串中指定版本号
                new headerapiversionreader() { headernames = { "x-api-version" } });
            });

 

  • 创建valuev1和valuev2两个测试控制器
using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.aspnetcore.http;
using microsoft.aspnetcore.mvc;

namespace webapiversion.controllers
{
    [apiversion("1.0",deprecated =true)]
    [route("api/values")]
    [apicontroller]
    public class valuesv1controller : controllerbase
    {
        [httpget]
        public ienumerable<string> get()
        {
            return new string[] { "value1 from version 1", "value2 from version 1" };
        }
    }
}
using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.aspnetcore.http;
using microsoft.aspnetcore.mvc;

namespace webapiversion.controllers
{
    [apiversion("2.0")]
    [route("api/values")]
    [apicontroller]
    public class valuesv2controller : controllerbase
    {
        [httpget]
        public ienumerable<string> get()
        {
            return new string[] { "value1 from version 2", "value2 from version 2" };
        }
    }
}

 

  • 接口默认返回设置的为2.0,现在请求1.0接口,使用header方式

.netcore2.1  接口添加api-version版本控制

  • 使用查询字符串方式请求

.netcore2.1  接口添加api-version版本控制

  • 使用apiversionneutral指定不需要版本控制的api
    [apiversionneutral]
    [route("api/[controller]")]
    [apicontroller]
    public class healthcheckcontroller : controllerbase
    {
        public string get()
        {
            return "good";
        }
    }