具有相同数量的参数的ASP.NET MVC路由的参数

时间:2014-04-10 23:31:43

标签: asp.net-mvc

路由匹配需要参数名称匹配。因此,下面将匹配任何操作与单个参数fileid。但是,匹配任何具有不同名称的单个参数的操作。因此,我有另一个采用单个参数sessionid的操作路由。

第二条路线不起作用,只宣布第一条路线。这让我感到困惑:我理解匹配在找到的第一个匹配时停止,但如果它与第一个参数名称不匹配,那么肯定匹配已找到并且匹配应该继续吗?但事实并非如此。

  config.Routes.MapHttpRoute(
    name: "DownloadUrl",
    routeTemplate: "api/{controller}/{action}/{fileid}"
    );
  config.Routes.MapHttpRoute(
    name: "Queue",
    routeTemplate: "api/{controller}/{action}/{sessionid}"
    );

我可以使用单一路线并调用我的参数A,B,C ......基本上将它们命名为序数位置。

  config.Routes.MapHttpRoute(
    name: "DownloadUrl",
    routeTemplate: "api/{controller}/{action}/{A}"
    );

但这是可怕的代码所以我认为我不太了解路由。我如何表达这两条路线?

1 个答案:

答案 0 :(得分:0)

实验表明,显式命名与默认值相结合可以解决这个问题:

  config.Routes.MapHttpRoute(
    name: "Authenticate",
    routeTemplate: "api/{controller}/Authenticate/{email}/{password}",
    defaults: new { action = "Authenticate" }
  );
  config.Routes.MapHttpRoute(
    name: "UploadedBytes",
    routeTemplate: "api/{controller}/UploadedBytes/{sessiondId}/{fileid}",
    defaults: new { action = "UploadedBytes" }
    );