我有一个奇怪的情况......我有这种api方法:
[Route("api/something")]
public class MyController : Controller
{
[HttpGet("test-{id}")]
public Task<T> method1() { ... }
[HttpGet("test-something-{id}")]
public Task<T> method2() { ... }
}
我想致电api/something/test-something-1
,但我的api致电api/something/test-1
为什么?
答案 0 :(得分:2)
路由"test-{id}"
与api/something/test-something-1
匹配,其中模板参数最终为id = something-1
。
这就是为什么当您致电api/something/test-something-1
并使用路线模板method1
调用test-{id}
当存在这样的路线冲突时,您应该使用路线约束来更好地区分路线。
[Route("api/something")]
public class MyController : Controller {
[HttpGet("test-{id:int}")]//Matches GET api/something/test-1
public Task<IActionResult> method1(int id) {
//...
}
[HttpGet("test-something-{id}")]//Matches GET api/something/test-something-any_id_here
public Task<IActionResult> method2(string id) {
//...
}
}
如果id
也被认为是int
,您也可以将路线约束应用于第二个。
[HttpGet("test-something-{id:int}")]//Matches GET api/something/test-something-1
public Task<IActionResult> method2(int id) {
//...
}
答案 1 :(得分:-2)
类声明不正确
[RoutePrifix("api/something")]
public Class blabla : Controller
{
[HttpGet("test-{id}")]
public Task<T> method1{}
[HttpGet("test-something-{id}")]
public Task<T> method1{}
}
在路由配置文件中,您必须启用属性路由。
routes.MapMvcAttributeRoutes();