【发布时间】:2011-04-04 00:12:12
【问题描述】:
我有一个与 MVC2 网站并排存在的 WCF 服务。我希望我的服务 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/ 并进入正确的页面。
我犯了什么可怕的新手错误?
【问题讨论】:
标签: wcf asp.net-mvc-2 asp.net-mvc-3 routing