“找到多個與名為“Home”的控制器匹配的類型。如果為此請求(“{controller}/{action}/{id}”)提供服務的路由在搜尋匹配此請求的控制器時沒有指定命名空間,則會發生此情況。如果是這樣,請通過調用含有“namespaces”參數的“MapRoute”方法的重載來註冊此路由。”
出現該問題的願原因是在預設的Golbal.asax.cs檔案中已經註冊了預設路由
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
//new string[] { "Working_with_Areas.Controllers"}
);
}
而在AREAS中有註冊了一個同名的Controller
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
//new string[] { "Working_with_Areas.Areas.Admin.Controllers" }
);
}
解決方案就是在每個註冊Router的時候加上命名空間即可。