我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在ASP.NET中利用WebApi实现一个版本控制功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在ASP.NET中利用WebApi实现一个版本控制功能

本篇文章为大家展示了如何在ASP.NET中利用WebApi实现一个版本控制功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

WebApi版本控制的好处

  • 有助于及时推出功能, 而不会破坏现有系统,兼容性处理更友好。

  • 它还可以帮助为选定的客户提供额外的功能。

 接下来就来实现版本控制以及在Swagger UI中接入WebApi版本

一、WebApi版本控制实现 

 通过Microsoft.AspNetCore.Mvc.Versioning实现webapi 版本控制

创建WebApi项目,添加Nuget包:Microsoft.AspNetCore.Mvc.Versioning

Install-Package Microsoft.AspNetCore.Mvc.Versioning

修改项目Startup文件,使用Microsoft.AspNetCore.Mvc.Versioning

public class Startup{  public Startup(IConfiguration configuration)  {    Configuration = configuration;  }  public IConfiguration Configuration { get; }  // This method gets called by the runtime. Use this method to add services to the container.  public void ConfigureServices(IServiceCollection services)  {    //根据需要设置,以下内容    services.AddApiVersioning(apiOtions =>    {      //返回响应标头中支持的版本信息      apiOtions.ReportApiVersions = true;      //此选项将用于不提供版本的请求。默认情况下, 假定的 API 版本为1.0      apiOtions.AssumeDefaultVersionWhenUnspecified = true;      //缺省api版本号,支持时间或数字版本号      apiOtions.DefaultApiVersion = new ApiVersion(1, 0);      //支持MediaType、Header、QueryString 设置版本号;缺省为QueryString、UrlSegment设置版本号;后面会详细说明对于作用      apiOtions.ApiVersionReader = ApiVersionReader.Combine(        new MediaTypeApiVersionReader("api-version"),        new HeaderApiVersionReader("api-version"),        new QueryStringApiVersionReader("api-version"),        new UrlSegmentApiVersionReader());    });    services.AddControllers();  }  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  {    if (env.IsDevelopment())    {      app.UseDeveloperExceptionPage();    }    app.UseHttpsRedirection();    //使用ApiVersioning    app.UseApiVersioning();    app.UseRouting();    app.UseAuthorization();    app.UseEndpoints(endpoints =>    {      endpoints.MapControllers();    });  }}

WebApi设置版本:

  a)通过ApiVersion标记指定指定控制器或方法的版本号;Url参数控制版本(QueryStringApiVersionReader),如下:

namespace WebAPIVersionDemo.Controllers{  [ApiController]  [Route("[controller]")]  //Deprecated=true:表示v1即将弃用,响应头中返回  [ApiVersion("1.0", Deprecated = true)]  [ApiVersion("2.0")]public class WeatherForecastController : ControllerBase  {    private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};     [HttpGet]    public IEnumerable<WeatherForecast> Get()    {      var rng = new Random();      return Enumerable.Range(1, 5).Select(index => new WeatherForecast      {        Date = DateTime.Now.AddDays(index),        TemperatureC = rng.Next(-20, 55),        Summary = $"v1:{Summaries[rng.Next(Summaries.Length)]}"      })      .ToArray();    }      }}

  通过参数api-version参数指定版本号;调用结果:

如何在ASP.NET中利用WebApi实现一个版本控制功能

如何在ASP.NET中利用WebApi实现一个版本控制功能

  b)通过Url Path Segment控制版本号(UrlSegmentApiVersionReader):为控制器添加路由方式如下,apiVersion为固定格式  

[Route("/api/v{version:apiVersion}/[controller]")]

  调用方式:通过调用路径传入版本号,如:http://localhost:5000/api/v1/weatherforecast

如何在ASP.NET中利用WebApi实现一个版本控制功能

  c)通过Header头控制版本号:在Startup中设置(HeaderApiVersionReader、MediaTypeApiVersionReader)

apiOtions.ApiVersionReader = ApiVersionReader.Combine(        new MediaTypeApiVersionReader("api-version"),        new HeaderApiVersionReader("api-version"));

  调用方式,在请求头或中MediaType中传递api版本,如下:

如何在ASP.NET中利用WebApi实现一个版本控制功能

如何在ASP.NET中利用WebApi实现一个版本控制功能

其他说明:

    a)ReportApiVersions设置为true时, 返回当前支持版本号(api-supported-versions);Deprecated 参数设置为true表示已弃用,在响应头中也有显示(api-deprecated-versions):

如何在ASP.NET中利用WebApi实现一个版本控制功能

    b)MapToApiVersion标记:允许将单个API操作映射到任何版本(可以在v1的控制器中添加v3的方法);在上面控制器中添加以下代码,访问v3版本方法

[HttpGet][MapToApiVersion("3.0")]public IEnumerable<WeatherForecast> GetV3(){  //获取版本  string v = HttpContext.GetRequestedApiVersion().ToString();  var rng = new Random();  return Enumerable.Range(1, 1).Select(index => new WeatherForecast  {    Date = DateTime.Now.AddDays(index),    TemperatureC = rng.Next(-20, 55),    Summary = $"v{v}:{Summaries[rng.Next(Summaries.Length)]}"  })  .ToArray();}

如何在ASP.NET中利用WebApi实现一个版本控制功能

   c)注意事项:

    1、路径中参数版本高于,其他方式设置版本

    2、多种方式传递版本,只能采用一种方式传递版本号

    3、SwaggerUI中MapToApiVersion设置版本不会单独显示    

二、Swagger UI中版本接入

 1、添加包:Swashbuckle.AspNetCore、Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer  

//swaggerui 包Install-Package Swashbuckle.AspNetCore//api版本Install-Package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer

 2、修改Startup代码:

public class Startup{  /// <summary>  /// Api版本提者信息  /// </summary>  private IApiVersionDescriptionProvider provider;  // This method gets called by the runtime. Use this method to add services to the container.  public void ConfigureServices(IServiceCollection services)  {    services.AddControllers();         //根据需要设置,以下内容    services.AddApiVersioning(apiOtions =>    {      //返回响应标头中支持的版本信息      apiOtions.ReportApiVersions = true;      //此选项将用于不提供版本的请求。默认情况下, 假定的 API 版本为1.0      apiOtions.AssumeDefaultVersionWhenUnspecified = true;      //缺省api版本号,支持时间或数字版本号      apiOtions.DefaultApiVersion = new ApiVersion(1, 0);      //支持MediaType、Header、QueryString 设置版本号;缺省为QueryString设置版本号      apiOtions.ApiVersionReader = ApiVersionReader.Combine(          new MediaTypeApiVersionReader("api-version"),          new HeaderApiVersionReader("api-version"),          new QueryStringApiVersionReader("api-version"),          new UrlSegmentApiVersionReader());    });    services.AddVersionedApiExplorer(option =>    {      option.GroupNameFormat = "接口:'v'VVV";      option.AssumeDefaultVersionWhenUnspecified = true;    });    this.provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();    services.AddSwaggerGen(options =>    {      foreach (var description in provider.ApiVersionDescriptions)      {        options.SwaggerDoc(description.GroupName,            new Microsoft.OpenApi.Models.OpenApiInfo()            {              Title = $"接口 v{description.ApiVersion}",              Version = description.ApiVersion.ToString(),              Description = "切换版本请点右上角版本切换"            }        );      }      options.IncludeXmlComments(this.GetType().Assembly.Location.Replace(".dll", ".xml"), true);    });  }  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  {    //……        //使用ApiVersioning    app.UseApiVersioning();    //启用swaggerui,绑定api版本信息    app.UseSwagger();    app.UseSwaggerUI(c =>    {      foreach (var description in provider.ApiVersionDescriptions)      {        c.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());      }    });    //……    }}

上述内容就是如何在ASP.NET中利用WebApi实现一个版本控制功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在ASP.NET中利用WebApi实现一个版本控制功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在ASP.NET中利用WebApi实现一个版本控制功能

本篇文章为大家展示了如何在ASP.NET中利用WebApi实现一个版本控制功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WebApi版本控制的好处有助于及时推出功能, 而不会破坏现有系统,兼容性
2023-06-06

如何android中利用DownloadManager实现一个版本更新功能

如何android中利用DownloadManager实现一个版本更新功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。DownloadManager简介DownloadMan
2023-05-31

如何在MongoDB中实现数据的版本控制功能

如何在MongoDB中实现数据的版本控制功能引言:在软件开发和数据处理过程中,版本控制是一个关键的功能。版本控制允许我们对数据进行追踪和记录,以便于回滚、审计和分析。在使用MongoDB数据库时,我们也可以实现数据的版本控制功能。本文将介绍
2023-10-22

使用Asp.NET怎么实现一个限流控制功能

使用Asp.NET怎么实现一个限流控制功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、AspNetCoreRateLimit 介绍AspNetCoreRa
2023-06-08

如何在Android中利用MediaRecorder实现一个录像功能

今天就跟大家聊聊有关如何在Android中利用MediaRecorder实现一个录像功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在AndroidManifest.xml加入以下
2023-05-31

如何在Android中利用Dialog实现一个对话框功能

今天就跟大家聊聊有关如何在Android中利用Dialog实现一个对话框功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、普通对话框AlertDialog.Builder bui
2023-05-31

怎么在Android中利用ImageView控件实现一个圆角功能

今天就跟大家聊聊有关怎么在Android中利用ImageView控件实现一个圆角功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.创建CustomImageView 类在你的项目
2023-05-31

如何在Android应用中利用ImageView实现一个选择本地图片功能

这期内容当中小编将会给大家带来有关如何在Android应用中利用ImageView实现一个选择本地图片功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。布局文件:
2023-05-31

利用java如何实现一个DataSource功能

本篇文章为大家展示了利用java如何实现一个DataSource功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 DataSource 对象所表示的物理数据源的连接。作为 DriverManag
2023-05-31

如何在Android应用中利用ListView实现一个分页功能

今天就跟大家聊聊有关如何在Android应用中利用ListView实现一个分页功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android ListView分页简单实现分页,开发
2023-05-31

如何在Android应用中利用SDK实现一个地图功能

这期内容当中小编将会给大家带来有关如何在Android应用中利用SDK实现一个地图功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.找到控制台创建一个应用2.添加key名称,注意命名规范,还有就是下面
2023-05-31

如何在Android中利用Recyclerview实现一个上拉加载功能

如何在Android中利用Recyclerview实现一个上拉加载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能,下拉
2023-05-31

如何在Android中利用 ViewPager实现一个循环播放功能

这篇文章将为大家详细讲解有关如何在Android中利用 ViewPager实现一个循环播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.初始化布局我们先来写一个ViewPager广告
2023-05-31

如何在Android中利用Glide实现一个图片圆角功能

如何在Android中利用Glide实现一个图片圆角功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、简介:介绍两种使用 BitmapTransformation 来实
2023-05-31

如何在Android中利用imageview实现一个图片缩放功能

如何在Android中利用imageview实现一个图片缩放功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 自定义imageview实现图片缩放实例详解 觉得
2023-05-31

如何在Android中利用viewpager实现一个无限轮播功能

如何在Android中利用viewpager实现一个无限轮播功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小圆点属性dot_focused.xml
2023-05-30

如何在Android中利用Intent实现一个页面跳转功能

本篇文章为大家展示了如何在Android中利用Intent实现一个页面跳转功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Intent实现页面之间跳转1、无返回值startActivity(int
2023-05-30

如何在springboot中利用Quartz实现一个定时任务功能

如何在springboot中利用Quartz实现一个定时任务功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、新建一个springboot工程,并添加依赖
2023-05-31

如何在Java中利用FileUpload实现一个文件上传功能

如何在Java中利用FileUpload实现一个文件上传功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体方法如下://创建磁盘文件项工厂 DiskFile
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录