У меня есть приложение ASP.NET MVC 3 (в IIS 7.5) с переносимой областью. Когда я размещаю приложение, занимающее переносимую область на веб-сайте, моя маршрутизация работает отлично, например
http://localhost:9001/Clearance/Home/Search (это работает)
Однако при размещении в виртуальном каталоге, например,
http://localhost/Acme.Risks.Clearance.Web.Area.TestUI/Clearance/Home/Search (это не работает)
Я получаю следующую ошибку:
Обнаружено несколько типов, соответствующих контроллеру с именем «Home». Это может произойти, если маршрут, который обслуживает этот запрос ('Clearance / {controller} / {action}'), не указывает пространства имен для поиска контроллера, соответствующего запросу. В этом случае зарегистрируйте этот маршрут, вызвав перегрузку метода MapRoute, который принимает параметр namespaces.
Я не понимаю, почему, я указываю пространства имен, которые отлично работают при работе на веб-сайте.
Вот моя портативная зона регистрации:
public override void RegisterArea(AreaRegistrationContext context, IApplicationBus bus)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
base.RegisterArea(context, bus);
context.MapRoute(
RouteName.ClearanceAreaDefault,
this.AreaName + "/{controller}/{action}/{id}",
new { controller = "Home", action = "Search", id = UrlParameter.Optional },
new[] { typeof(HomeController).Namespace });
}
Вот Global.asax для веб-приложения в виртуальном каталоге (не работает):
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { typeof(HomeController).Namespace });
}
Вот Global.asax для веб-приложения на веб-сайте (работает):
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "Acme.Risks.Web.UI.Controllers" });
}
Я использовал "RouteDebugger" Фила Хаака (http://nuget.org/packages/routedebugger), и информация об отладке маршрута по обоим запросам идентична.
Кто-нибудь знает, почему это происходит?
Спасибо
Каллум