2011-10-20 189 views
0

兩條簡單的mvc3路由,用戶名和默認全部捕獲。MVC路由,查詢參數

routes.MapRoute(
    "Users", 
    "{username}", 
    new { controller = "User", action = "Index"} 
); 

routes.MapRoute(
    "Default", 
    "{*url}", 
    new { controller = "Default", action = "Index" } 
); 

如何使用戶路徑接受任何額外的查詢參數,如/用戶名= REF實 這個例子只是首腦默認路由...

編輯: 是我不好,是一個有點驚訝,因爲它不應該關心查詢參數。 解決方案=清理並重建項目。

回答

0

更新如下第一條路線:

routes.MapRoute(
    "Users", 
    "/username", 
    new { controller = "User", action = "Index"} 
); 

在你的控制器操作添加參數「裁判」,使其MVC會自動將查詢字符串「裁判」到控制器。

+0

對不起,隊友,我的壞! – Simon

0

的參數添加到路由,不要忘了將它添加到你的行動。 我建議增加一些對URL的開始,使之成爲一個更具體的(如果你的任何其他路由添加到您的項目) 例

routes.MapRoute(
    "Users", 
    "users/{username}/{ref}", 
    new { controller = "User", action = "Index", ref = UrlParameter.Optional } 
); 

,並在你的行動你想要

public ActionResult Index(ref) 
{ 
    if (string.IsNullOrEmpty(ref)) 
    { 
     //TODO: add your logic here 
    } 
} 

這應該接受/users/someusername/facebook.com OR /users/someusername?ref=facebook.com

0

查詢字符串參數,如?ref=不是路線段定義的一部分。例如,路線llike:

routes.MapRoute(
       "Default", 
       "{controller}/{action}", 
       new { controller = "Home", action = "Index"} 
      ); 

仍然會像匹配的URL:/Home/Index?ref=facebook

所以你不必改變你的路線,以適應即席查詢字符串。在您的操作/控制器中處理它們是一回事,因爲您必須遵循CoC Convention over配置指導原則並與操作中的查詢字符串參數相匹配。