2014-04-07 28 views
3

我有一個MVC應用程序與幾個區域。每個區域以及根目錄都有一個HomeController。MVC路由與區域匹配控制器:發現多種類型與控制器相匹配

/Home/Index 
/Admin/Home/Index 
/Content/Home/Index 

所有這些做工精細,正確確定要使用的家居控制器。

我的問題是,每個區域也有ReportsController,但根沒有。

/Admin/Reports/Index 
/Content/Reports/Index 

都如預期這些工作,但我得到的「多種類型的發現匹配控制器」爲網址/報告/索引錯誤。它與默認路線相匹配,但會溢出到區域。我的假設是它應該是404,就像所有區域缺少的路線一樣。

我的路由被配置如下:

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

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

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

問題路線(/報告/指數)的默認路線地圖上進行匹配,但不是限制於定義Website.Controllers的命名空間它也看在地區。相反,它應該將搜索範圍限制在Website.Controllers,並在其中找不到ReportsController時返回404。

回答

相關問題