rou*_*tic 25 wcf routing asp.net-mvc-3 asp.net-mvc-2
我有一个与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
);
}
Run Code Online (Sandbox Code Playgroud)
该服务出现在我描述的地方,并按宣传的方式工作.大.
但是,我只是注意到以这种方式命令我的代码会改变我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/并进入正确的页面.
我制作了一个非常明显的新手错误?
小智 9
我解决了这个问题:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "^(?!api).*" }
);
routes.Add(new ServiceRoute("api", new DataServiceHostFactory(), typeof(dwService)));
Run Code Online (Sandbox Code Playgroud)
我希望这对你有好处
| 归档时间: |
|
| 查看次数: |
5095 次 |
| 最近记录: |