ASP.NET Core 3.0 实战:构建多版本 API 接口
services.AddApiVersioning((o) =>
{
o.ReportApiVersions = true;//可选配置,设置为true时,header返回版本信息
o.DefaultApiVersion = new ApiVersion(, );//默认版本,请求未指明版本的求默认认执行版本1.0的API
o.AssumeDefaultVersionWhenUnspecified = true;//是否启用未指明版本API,指向默认版本
}).AddVersionedApiExplorer(option =>
{
option.GroupNameFormat = "'v'VVVV";//api组名格式
option.AssumeDefaultVersionWhenUnspecified = true;//是否提供API版本服务
}).AddSwaggerGen((s) =>
{
//填充UI内容
var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
foreach (var description in provider.ApiVersionDescriptions)
{
s.SwaggerDoc(description.GroupName,
new Info()
{
Title = $"体检微服务接口 v{description.ApiVersion}",
Version = description.ApiVersion.ToString(),
Description = "微服务框架-切换版本请点右上角版本切换",
Contact = new Contact() { Name = "荣少(黎更荣) WeChat:186***** QQ:157537648", Email = "*******@hotmail.com" }
}
);
}
//生成API XML文档
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, typeof(Startup).GetTypeInfo().Assembly.GetName().Name + ".xml");
s.IncludeXmlComments(xmlPath);
});
以上代码其中option.GroupNameFormat = "'v'VVVV";//api组名格式,各位可以尝试玩玩~~~~
在Startup->Configure方法中添加以下代码
app.UseSwagger().UseSwaggerUI((o) =>
{
foreach (var description in provider.ApiVersionDescriptions)
{
o.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
}
});
其中在Startup->Configure方法中缺少了IApiVersionDescriptionProvider provider参数,自己手动补上即可
//项目自动生成的版本
public void Configure(IApplicationBuilder app, IHostingEnvironment env) //参数补上后的版本
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
以上配置基本上算时完成了,那么Web Api要怎么写法呢?
在WebApi项目中Controllers下建立v1、v2俩个文件夹
namespace WebApplication1.Controllers.v1
{
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "v1", "v1" };
}
}
}
namespace WebApplication1.Controllers.v2
{
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "v2", "v2" };
}
}
}
这里的路由设置了配置的标签{version:apiVersion},其中ApiVersion中有各类的属性字段,例如:弃用(不代表停用,就好像巨硬上已经过时的方法)该版本API-ApiVersion("1.0", Deprecated = true)],该[ApiVersionNeutral
]标签就是表明停用,不需要该版本。
配置完成后,可以直接用url访问不同版本的接口地址:
https://localhost:44383/api/v1/Values
https://localhost:44383/api/v2/Values
最后的配置,因为项目默认启动的是api/Values接口地址,需要修改项目Properties->launchSettings.json
最终运行效果如下:
2019-10-21 博客园网友反馈的问题
1、运行不成功的项目是 @化身孤岛的蓝羽 提供的,谢谢!
2、但是楼主写这篇文章的时候.Net Core preview 8 / 9忘记了,代码也没有保留
3、@化身孤岛的蓝羽反馈根据我的文章步骤,生产的项目无法正常运行,错误:
是不是有点懵了,我也懵了,但是不要放弃,方法总比困难多,根据上面的提示,度娘下,更懵没有解决的方案。
推荐大家用bing、google搜索,这样更加精致。由于微软开源,github上直接看aspnet-api-versioning - Issues,估计
很多人会遇到你出现的问题。
其实刚入门的朋友一看,NuGet好像没有这个版本的Microsoft.AspNetCore.Mvc.Versioning,那应该怎么办?
项目中打开管理NuGet程序包,选择你想要了解的组件
点击下右上角的nuget.org,你就可以找到你想要的版本号信息
如此类推,如下组件都更新到最新版本
把对应,你想要的版本号替换到Version即可,然后项目会重新加载,你再次运行,还是报错,裴漼不......
搞掂,运行成功
如果是对您有帮助,而您又比较慷概的请微信打赏下(后续会有更多的分享):
ASP.NET Core 3.0 实战:构建多版本 API 接口的更多相关文章
- 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目
上一部分预备知识在这 http://www.cnblogs.com/cgzl/p/9010978.html 如果您对ASP.NET Core很了解的话,可以不看本文, 本文基本都是官方文档的内容. A ...
- 用ASP.NET Core 2.0 建立规范的 REST API
什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识
什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识1
什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH 和 Log
本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314 ...
- Asp.Net Core 3.0 学习3、Web Api 文件上传 Ajax请求以及跨域问题
1.创建Api项目 我用的是VS2019 Core3.1 .打开Vs2019 创建Asp.Net Core Web应用程序命名CoreWebApi 创建选择API 在Controller文件夹下面添加 ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST
本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314 ...
- 【翻译】asp.net core 3.0基本概念
这篇文章描述了开发asp.net core所需要掌握的基本概念. 原文地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/?vie ...
- 从 MVC 到使用 ASP.NET Core 6.0 的最小 API
从 MVC 到使用 ASP.NET Core 6.0 的最小 API https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/ 2007 年,随着 ...
随机推荐
- 关于初步搭建完成SSH环境之后,JUnit test 测试成功,页面测试时:@Resource 注入的dao为null
这个问题研究了一天,还是因为配置的时候没有认真,一不小心,酿成了大错.当发现的时候感觉好尴尬啊::>_<:: CostAction: package com.tenni.action; i ...
- iframe页面刷新问题
1.问题:当iframe的页面加载过再关闭之后,如果iframe的src没有发生变化,js不会重新加载,再次打开页面不会刷新: 2.解决方法:关闭页面时清空src,再次打开时即可重新加载最新数据. $ ...
- WOSA/XFS PTR Form解析库—FormRule.h
#ifndef _FORMRULE_H_#define _FORMRULE_H_ #include <XFSPTR.H>#include <string>#include &l ...
- Vue -- vue-cli webpack打包开启Gzip 报错
前两天项目上线,用vue-cli npm run build命令打包,打包完成后我擦吓了一跳,15M.本来暂时不打算优化的,但是每次看着部署包这么大,想想还是先优化一下,让包好看点,免得以后出现心理阴 ...
- 记一款bug管理系统(bugdone.cn)的开发过程(2) -如何做好登录界面
一. 做了一个大胆的决定,官网首页便是登录界面 BugDone,Bug管理工具的定位就是一款非常易用的工具,所以我们没有像其它平台那样进官网首页都是一些功能和业务的介绍. 我们觉得方便用户快速进入工作 ...
- Asp.Net Core Docker镜像更新系统从wheezy改为stretch
之前写过一个在Asp.Net Core里调用System.Drawing.Common绘图的DEMO,部署到Docker里运行,需要更新Asp.Net Core镜像的操作系统. https://www ...
- python常用模块之-random模块
random模块顾名思义就是生成随机数的模块. random模块有以下常见方法: 1,打印0-1之间的任意随机浮点数,不能指定区间. print(random.random()) 2,打印随机符点数, ...
- oracle 忘记了scott用户的密码,该怎么修改
sqlplus / as sysdba,进入sys用户下,alter user scott identified by 123456,改成自己需要的密码
- docker基础:dockerfile的介绍
Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像.我们会先介绍 Dockerfile 的基本结构及其支持的众多指令,并具体讲解通过执行指令来编写 ...
- Oracle EBS INV 更新物料慢
失效 ICX SELECT FA.APPLICATION_SHORT_NAME, FA.APPLICATION_ID, PI.STATUS, PI.PRODUCT_VERSION, PI.PATCH_ ...