2013-05-12 34 views
1

我有一個MVC 4網站,其中定義了常用的默認路由(包括API路由),另外還有一個管理功能區域,它有自己的路由。所述路由配置看起來像這樣:爲什麼我的區域路由失敗的一個控制器,但沒有另一個?

默認路由:

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

默認API路線:

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

管理區路線(在該區域註冊代碼):

context.MapRoute(
    "Admin_default", 
    "Admin/{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new[] { "MyProject.Areas.Admin.Controllers" } 
); 

此外,管理區域擁有自己的視圖佈局頁面。

主站點的路由都正常工作(包括API控制器的HTTP路由),但Admin區域的路由顯示出一些奇怪的行爲。對管理區域中的家庭控制器的請求成功,而對管理區域中的其他控制器的請求則不成功。我得到的錯誤是

System.Web.HttpException: The controller for path '/admin/concerts' was not found or does not implement IController. 

有趣的是,與異常關聯的堆棧跟蹤包含的代碼從主佈局頁面,而不是管理方面的佈局網頁,我認爲提出該請求已路由到默認路由而不是管理路由。

我試過用Glimpse調試路由配置,但沒有多少運氣,除了要通過第二個介質確認路由對管理區域的HomeController正確工作,而不是對該區域中的其他控制器。

更新:

我有以下相關的控制器定義:

  • 默認路由:
    • MyProject.Controllers.ConcertsController
    • MyProject.Controllers.HomeController
    • (有些人,而不是與此有關)。
  • 默認HTTP路線:
    • MyProject.Controllers.Api.ConcertsController
  • 管理區路線:
    • MyProject.Areas.Admin.Controllers.ConcertsController;和
    • MyProject.Areas.Admin.Controllers.HomeController只有
+0

你能分享一些更多的細節。你的演唱會控制器如何?這個問題是否會將管理區域中的所有控制器放在其他家中? – Guanxi 2013-05-12 19:25:20

+0

@桂溪根據要求更新。管理區域中唯一的兩個控制器是Concerts和Home控制器。家庭控制器工作;音樂會控制器不會。 – alastairs 2013-05-12 19:37:47

回答

0

事實證明,這不是一個路由的問題在所有的,而是與視圖定義一個問題:每個ConcertsController意見包括指着該圖的佈局聲明主站點的佈局。

相關問題