无法将 API 的 v2 版本作为默认路由 c#
Posted
技术标签:
【中文标题】无法将 API 的 v2 版本作为默认路由 c#【英文标题】:Unable to make v2 version of API as default route c# 【发布时间】:2018-06-18 02:33:50 【问题描述】:所以我有两个版本的控制器(及其 GET 操作),我们称之为 v1
和 v2
。
.../Controller/v1/MyController.cs
看起来像
[ApiVersion("1")]
[Route("api/[controller]")]
[Route("api/vversion:apiVersion/[controller]")]
public class MyController : Controller
..
[HttpGet]
public async Task<IActionResult> GetAsync()
..
请注意,此控制器具有 [Route("api/[controller]")]
默认属性,因此我可以通过 localhost:5000/v1/my
和 localhost:5000/my
访问它。
.../Controller/v2/MyController.cs
看起来像
[ApiVersion("2")]
[Route("api/vversion:apiVersion/[controller]")]
public class MyController : Controller
..
[HttpGet]
public async Task<IActionResult> GetAsync()
..
此 API 当前由 localhost:5000/v2/my
访问。
现在,我想将 v2 设为默认 API 而不是 v1。
所以我尝试添加[Route("api/[controller]")]
属性,所以我的v2 controller
看起来像:
[ApiVersion("2")]
[Route("api/[controller]")]
[Route("api/vversion:apiVersion/[controller]")]
public class MyController : Controller
..
[HttpGet]
public async Task<IActionResult> GetAsync()
..
现在,当我尝试在 POSTMAN 上运行并执行以下错误时:
"Error":
"Code": "UnsupportedApiVersion",
"Message": "The HTTP resource that matches the request URI 'http://localhost:5000/api/my' does not support the API version '1.0'."
但是,默认路由在设置后适用于 v1 版本。 我不确定这是为什么。是因为命名空间吗?控制器类的位置包含命名空间中的 v2。
任何线索都会有所帮助。
【问题讨论】:
【参考方案1】:在StartUp文件中,可以设置默认的Api版本
services.AddApiVersioning(o =>
o.ReportApiVersions = true;
o.AssumeDefaultVersionWhenUnspecified = true;
o.**DefaultApiVersion** = new ApiVersion(2, 0);
);
【讨论】:
以上是关于无法将 API 的 v2 版本作为默认路由 c#的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 无法将创建的集成附加到 API 网关的路由中