我用这样的路线构建api:
/items
和/items/{id}
。
现在我想将这些路线路由到两个不同的动作。我无法使用属性进行配置,这里是config:
routes.MapRoute(
"route1",
"/items",
new { controller = "Items", action = "Get" });
routes.MapRoute(
"route2",
"/items/{id}",
new { controller = "Items", action = "Get" });
但这条路线并不起作用。我哪里错了?
答案 0 :(得分:1)
不可能有2个具有相同名称的操作方法,并使用路由模板映射它们,除非这些方法映射到不同的HTTP方法(所有这些都归功于模型绑定的工作方式):
public class ProductsController : Controller
{
public IActionResult Edit(int id) { ... }
[HttpPost]
public IActionResult Edit(int id, Product product) { ... }
}
但是,可以使用属性路由做到这一点。如果您不能使用此方法,那么您只有以下选项:
将两个操作合并为一个带有可选id
参数的操作。
public class ItemsController:Controller { public IActionResult Get(int?id) { if(id.HasValue()){//第二个动作中的逻辑} else {//第一个动作逻辑} } }
并将路由定义为
routes.MapRoute(
name: "route",
template: "{controller=Items}/{action=Get}/{id?}");