2012-04-03 56 views
0

我創建了一個正常工作的MVC應用程序。現在我想在url中添加自定義鍵並對它們進行解析,它只適用於一種類型的Url而不適用於下一個,因此它有什麼問題。Maproute無法使用前綴?

我的路由條目爲:

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

上面的url工作正常。

  • 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) 
{ 
} 

所以,請讓我知道我怎麼能解決這個問題。

回答

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和關鍵字參數時,MVC纔會匹配該路由。否則,如果你只有client_key參數,它將跳過第一條路線並匹配第二條路線。