无法将 API 的 v2 版本设为默认路由 c#



所以我有两个版本的控制器(及其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。

任何线索都会有所帮助。

在启动文件中,可以设置默认的 API 版本

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

最新更新