Maproute没有处理前缀?

时间:2012-04-03 14:33:37

标签: asp.net-mvc routing url-routing

我创建了一个工作正常的MVC应用程序。现在我想在url中添加自定义键并解析它们,它只适用于一种类型的Url而不适用于下一种,所以它的问题是什么。

我的路线条目是:

 routes.MapRoute(null,"client_{client_key}",
          new 
          { 
              controller = "templates", action = "contents_page" 
          });
routes.MapRoute(null,"client_{client_key}/{keyword}", 
          new 
          { 
              controller = "templates", action = "contents_pagen"
          });

我的网址:

  • http://www.lmenaria.com/client_1
  • http://www.lmenaria.com/client_2

以上网址正常工作。

  • http://www.lmenaria.com/client_1/home.html
  • http://www.lmenaria.com/client_2/home.html

这两种类型的网址都不起作用,我在home.html操作中的关键字参数中未获得contents_pagen

我的行动:

public ActionResult contents_pagen(string client_key, string keyword, FormCollection frmColl)
{
}

所以请告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

交换您的路线条目,以便首先找到更具体的路线:

routes.MapRoute(null,"client_{client_key}/{keyword}", 
    new 
    { 
        controller = "templates", action = "contents_pagen"
    });
routes.MapRoute(null,"client_{client_key}",
    new 
    { 
        controller = "templates", action = "contents_page" 
    });

在请求管道中,操作方法解析程序看到您有一个client_key路由参数,并且它与第一个可用路由匹配。

通过首先放置带有关键字param的路由,只有当您的URL同时包含client_key和keyword params时,MVC才会匹配该路由。否则,如果您只有client_key参数,它将跳过第一个路径并匹配第二个路径。