У меня есть служба WCF, которая живет бок о бок с веб-сайтом MVC2. Я бы хотел, чтобы мой URL-адрес службы выглядел следующим образом:
http://localhost/projdir/Service
Сайт MVC находится в зачаточном состоянии, поэтому он все еще имеет свои контроллеры и т.д.
Следующий код работает на первый взгляд в global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new ServiceRoute("Service", new ServiceHostFactory(),
typeof(MyService)));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
}
Служба отображается только там, где я описывал и работает как рекламируемый. Отлично.
Однако я просто заметил, что упорядочение моего кода таким образом изменяет все мои ActionLink
. Например, вкладка "О программе" на сайте MVC теперь выглядит следующим образом:
http://localhost/projdir/Service?action=About&controller=Home
Это явно неверно (это должно быть http://localhost/projdir/Home/About/
).
Если я перемещаю добавление ServiceRoute
ниже стандартного вызова MapRoute()
, тогда я получаю недостающую ошибку контроллера. (На самом деле я получаю сообщение об ошибке "StructureMapControllerFactory не возвратил экземпляр контроллера", потому что я подключен к StructureMap, duh, это не контроллер для начала.)
Интересно, что это только влияет на вывод Html.ActionLink()
. Я могу вручную ввести http://localhost/projdir/Home/About/
и перейти на правильную страницу.
Какую ужасную очевидную ошибку новичка я делаю?