将两个不同的路由映射到同一个控制器操作
Map two different routes to the same controller action
我正在努力扩展示例:https://docs.asp.net/en/latest/tutorials/first-web-api.html
他们有一个 ToDo api:/api/todo
和 /api/todo/{id}
。
我想将其扩展到 ToDoGroups /api/ToDoGroup
。
在 ToDoGroup 下,我想通过以下方式到达 ToDo:
/api/ToDoGroup/{id}/ToDo/{id}
.
如何让它指向相同的控制器操作?例如,下面的操作也将有另一条路线,如 [HttpGet("ToDoGroup/{ToDoGroupid}/ToDo/{ToDoid}", Name = "GetTodo")]
[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(string id)
{
var item = TodoItems.Find(id);
if (item == null)
{
return NotFound();
}
return new ObjectResult(item);
}
首先修改controller的路由前缀:
[Route("api/todogroup/{groupId:int}")]
public class TodoController : Controller
然后更改您的操作路线:
[HttpGet("todo/{id}", Name = "GetTodo")]
public IActionResult GetById(int groupId, string id)
编辑:
要获得这两条路线,您可以这样做:
[Route("api")]
public class TodoController : Controller
[HttpGet("todo/{id}", Name = "GetTodo")]//api/todo/43
public IActionResult GetById(string id)
[HttpGet("todogroup/{groupdId:int}/todo/{id}", Name = "GetGroupTodo")]//api/todogroup/100/todo/43
public IActionResult GetById(int groupId, string id)
Asp.Net Web Api 有一种方法可以否定路由前缀(在控制器上指定的路由),但我在 Asp.Net Core 中找不到等效项。
我正在努力扩展示例:https://docs.asp.net/en/latest/tutorials/first-web-api.html
他们有一个 ToDo api:/api/todo
和 /api/todo/{id}
。
我想将其扩展到 ToDoGroups /api/ToDoGroup
。
在 ToDoGroup 下,我想通过以下方式到达 ToDo:
/api/ToDoGroup/{id}/ToDo/{id}
.
如何让它指向相同的控制器操作?例如,下面的操作也将有另一条路线,如 [HttpGet("ToDoGroup/{ToDoGroupid}/ToDo/{ToDoid}", Name = "GetTodo")]
[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(string id)
{
var item = TodoItems.Find(id);
if (item == null)
{
return NotFound();
}
return new ObjectResult(item);
}
首先修改controller的路由前缀:
[Route("api/todogroup/{groupId:int}")]
public class TodoController : Controller
然后更改您的操作路线:
[HttpGet("todo/{id}", Name = "GetTodo")]
public IActionResult GetById(int groupId, string id)
编辑: 要获得这两条路线,您可以这样做:
[Route("api")]
public class TodoController : Controller
[HttpGet("todo/{id}", Name = "GetTodo")]//api/todo/43
public IActionResult GetById(string id)
[HttpGet("todogroup/{groupdId:int}/todo/{id}", Name = "GetGroupTodo")]//api/todogroup/100/todo/43
public IActionResult GetById(int groupId, string id)
Asp.Net Web Api 有一种方法可以否定路由前缀(在控制器上指定的路由),但我在 Asp.Net Core 中找不到等效项。