【发布时间】:2018-06-18 02:33:50
【问题描述】:
所以我有两个版本的控制器(及其 GET 操作),我们称之为 v1 和 v2。
.../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/my 和 localhost: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