Я немного запутался с маршрутизацией области. Я создал область под названием Backbone. У меня также есть контроллер по умолчанию, представления и модели.
http://localhost:46870/
дает мне следующую ошибку:
Multiple types were found that match the controller named 'home'. This can happen if
the route that services this request ('{controller}/{action}/{id}') does not specify
namespaces to search for a controller that matches the request. If this is the case,
register this route by calling an overload of the 'MapRoute' method that takes a
'namespaces' parameter.
The request for 'home' has found the following matching controllers:
LearnJavascript.Areas.BackBone.Controllers.HomeController
LearnJavascript.Controllers.HomeController
Вот магистральный маршрут (это пришло с эшафотами, я не вносил никаких изменений):
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"BackBone_default",
"BackBone/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
Маршрут по умолчанию (Это пришло с скаффолдингом, я не делал никаких изменений):
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Я думал, что если URL-адрес не начинается с
http://localhost:46870/Backbone
магистральная область не будет называться домашней. Итак, почему маршрутизация запуталась в этом.
Самая запутанная часть была, когда я назвал этот URL:
http://localhost:46870/home/index
Он показывает мне то же сообщение об ошибке. Почему маршрутизация MVC так сильно запутана в этом.
Я использую VS2013 и MVC5.
Backbone
, двусмысленности нет, и вызывается правильный контроллер. Но в противном случае все домашние контроллеры потенциально могут совпадать, поэтому вам нужно указать пространство имен на маршруте, чтобы устранить двусмысленность. - person Chris Pratt   schedule 30.07.2014Controller
, и ищет их, чтобы найти действие для обработки маршрута. Ваш локальный маршрут определяет конкретное пространство имен для поиска, поэтому двусмысленности нет, но ваш маршрут по умолчанию — нет, поэтому любой домашний контроллер, независимо от того, в каком пространстве имен он находится, соответствует. - person Chris Pratt   schedule 30.07.2014