无法将 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 操作),我们称之为 v1v2

.../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/mylocalhost: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#的主要内容,如果未能解决你的问题,请参考以下文章

使用版本控制实现 Laravel API 路由

无法使用 v2 API 版本创建草稿 PayPal 发票

Symfony中的API版本控制

Terraform 无法将创建的集成附加到 API 网关的路由中

在 C# 中使用 Youtube API V3 从频道获取视频

无法在发行版中激活 Google Maps API v2