ASP.NET Core使用具有不同params的相同url的不同操作路由

时间:2017-08-07 15:23:58

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

我用这样的路线构建api: /items/items/{id}。 现在我想将这些路线路由到两个不同的动作。我无法使用属性进行配置,这里是config:

routes.MapRoute(
    "route1", 
    "/items", 
    new { controller = "Items", action = "Get" });

routes.MapRoute(
    "route2", 
    "/items/{id}", 
    new { controller = "Items", action = "Get" });

但这条路线并不起作用。我哪里错了?

1 个答案:

答案 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?}");