2012-11-28 21 views
2

有沒有可能創建一個路線沒有行動?如何創建一個沒有操作的路線?

我有這樣的默認路由:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

但我也想有這樣的URL:http://mysite/bar/1234其中1234IDbar是控制器。

所以我創建了以下路線:

routes.MapRoute(
    name: "BarRoute", 
    url: "{controller}/{id}", 
    defaults: new { controller = "bar", action = "Index", id = UrlParameter.Optional } 
); 

但是,當我瀏覽到http://mysite/bar/1234,它說,資源是找不到的。我在第二條路線上做錯了什麼?

回答

3

你不能按順序以下兩條路線不受任何約束

  • {controller}/{action}/{id}
  • {controller}/{id}

這2個途徑是不相容的。當您嘗試訪問http://mysite/bar/1234時,路由引擎正在分析您的路線,/bar/1234與您的第一條路線相符。除此之外,我猜你在Bar控制器上沒有叫做1234的操作。

所以,如果你想這個設置工作,你需要指定一些constraints。另外不要忘記,你的路由定義的順序很重要,因爲它們是按照你定義的順序解決的。所以請確保您在頂部放置更具體的路線。

3
routes.MapRoute(
    name:  "BarRoute", 
    url:   "{controller}/{id}", 
    defaults: new { controller = "Bar", action = "Index" }, 
    constraints: new { id = @"\d+" } 
); 

你必須考慮到,你的路線必須放置在適當的位置帳戶 - 更普遍的路線之前,例如:

routes.MapRoute(
      name: "BarRoute", 
routes.MapRoute(
      name: "Default", 
相關問題