У меня есть служба 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, да, это не контроллер с самого начала.)
Интересно, что это только кажетсяповлиять на вывод Html.ActionLink()
.Я могу вручную ввести http://localhost/projdir/Home/About/
и перейти на нужную страницу.
Какую ужасно очевидную ошибку новичка я делаю?