【问题标题】:Unable to make v2 version of API as default route c#无法将 API 的 v2 版本作为默认路由 c#
【发布时间】:2018-06-18 02:33:50
【问题描述】:

所以我有两个版本的控制器(及其 GET 操作),我们称之为 v1v2

.../Controller/v1/MyController.cs 看起来像

[ApiVersion("1")]
[Route("api/[controller]")]
[Route("api/v{version: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/v{version: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/v{version: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。

任何线索都会有所帮助。

【问题讨论】:

    标签: c# asp.net-mvc controller routes


    【解决方案1】:

    在StartUp文件中,可以设置默认的Api版本

    services.AddApiVersioning(o => {
                o.ReportApiVersions = true;
                o.AssumeDefaultVersionWhenUnspecified = true;
                o.**DefaultApiVersion** = new ApiVersion(2, 0);
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多