【问题标题】:Maproute not working on prefix?Maproute不适用于前缀?
【发布时间】:2012-04-03 14:33:36
【问题描述】:

我创建了一个运行良好的 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

两种类型的 url 都不起作用,我在 contents_pagen 操作的关键字参数中没有得到 home.html

我的行动:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    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 路由参数,并将它与第一个可用路由匹配。

    通过将带有关键字参数的路由放在首位,MVC 将仅在您的 URL 包含 client_key 和关键字参数时匹配该路由。否则,如果您只有 client_key 参数,它将跳过第一条路线并匹配第二条路线。

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多