为什么我的api与正确的路线不匹配

时间:2017-05-16 08:29:37

标签: c# asp.net-core asp.net-core-webapi asp.net-core-routing

我有一个奇怪的情况......我有这种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

为什么?

2 个答案:

答案 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) {
    //...
}

参考:Routing in ASP.NET Core : Route Constraint Reference

答案 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();