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
只有
你能分享一些更多的細節。你的演唱會控制器如何?這個問題是否會將管理區域中的所有控制器放在其他家中? – Guanxi 2013-05-12 19:25:20
@桂溪根據要求更新。管理區域中唯一的兩個控制器是Concerts和Home控制器。家庭控制器工作;音樂會控制器不會。 – alastairs 2013-05-12 19:37:47