我有一個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。
當然,這是一個神奇的字符串。 – jdehlin