2011-06-03 33 views
1

有一天我會明白的路由,但是這是我有:另一個MVC路由問題

public static void RegisterRoutes(RouteCollection routes) { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("favicon.ico"); 



      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{LicenceCode}", // URL with parameters 
       new { controller = "Home", action = "Index", LicenceCode = UrlParameter.Optional } // Parameter defaults 
      ); 

     } 

如果我去http://localhost一切正常

如果我去http://localhost/Home/Index/1234一切正常

如果我去http://localhost/1234它404的

我試圖菲爾哈克的路線調試器,但因爲它拋出一個404路線調試器不工作。

什麼我必須做在的RegisterRoutes爲http://localhost/1234工作

回答

1
routes.MapRoute(
    "LicenceCode", 
    "{LicenceCode}" 
    new { controller = "Home", action = "Index", LicenceCode = UrlParameter.Optional } // Parameter defaults 
); 

然後/1234意志路線Home控制器的Index行動:

public ActionResult Index(string licenceCode) 
{ 
    ... 
} 
+0

這是除了我目前的路線嗎?我有其他控制器,所以我需要能夠去http:// localhost/basket例如 – Jon 2011-06-03 11:46:20

+0

@Jon,你不能。您如何期望路由引擎在'/ foo'和'/ basket'之間消除歧義,其中第一種情況下'foo'代表許可代碼,第二種情況下控制器?這根本沒有意義。你可以做的是指定一個正則表達式路由約束,如果你的許可證號碼遵循某種模式,那麼第四個參數指向MapRoute。通過這種方式,您可以在默認路由之前擁有許可證路由,並且如果約束得到滿足,許可證路由將匹配。 – 2011-06-03 12:37:46

0

我沒有在Visual Studio我認爲它會是

routes.MapRoute(
    "Default2", 
    "{LicenceCode}", 
    new { controller = "Home", action = "Index", LicenceCode = UrlParameter.Optional } 
); 

你肯定會想把這最後一個放在你的路由註冊中,因爲這會劫持很多路徑,我會想象的。

1

你必須使用下面的根,而不是您:

routes.MapRoute(
    "Default", // Route name 
    "{LicenceCode}", // URL with parameters 
    new { controller = "Home", action = "Index", LicenceCode = UrlParameter.Optional } // Parameter defaults 
); 
+0

當我到達其他控制器時它是如何工作的,例如/ http:// localhost/basket – Jon 2011-06-03 11:49:04

0

設置上述 routes.MapRoute( 「默認」 所提到的缺省路由,//路線名稱 「{} LicenceCode」,//URL帶參數 新{controller =「Home」,action =「Index」,LicenceCode = UrlParameter.Optional} //參數默認值 );

但是不要在global.asax中添加1000行路由我已經在幾個MVC 1站點上看到了這一點,它的維護真的很糟糕。

對於其他路由,通過視圖和控制器處理它們。例如:

  1. 在控制器:在ActionResults方法,可以做 返回RedirectToAction( 「ClientEnrollment」, 「順式」);

  2. 在一個視圖中:鏈接 @ Html.ActionLink(「Select」,「ClientDetails」,「Cis」,new {id = item.ClientId},null)|