MVC路由与服务路由冲突

时间:2012-10-23 18:22:37

标签: asp.net asp.net-mvc

我正在尝试将现有的Web项目转换为MVC。我在VS 2012中制作了一个标准的MVC项目。它添加了路由配置。我现有的项目已包含WCF服务使用的路由条目。所以现在路由配置如下:

// Was here before, used by services
routes.Add(new ServiceRoute("AppServer", new WebServiceHostFactory(), typeof(MyService)));

// the rest is added by vs to configure a default controller
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

我意识到服务部分应该始终先行,因为它更具限制性。如果将服务放到最后,服务就不起作用。但现在的问题是

@Html.ActionLink("text", "MyAction", "MyController")

现在为我生成类型

的链接
http://localhost/AppServer?action=MyAction&controller=My

而不是

http://localhost/My/MyAction

我期待的。

有谁知道如何使服务路线和与mvc相关的路线“和平相处”,即不相互影响?

1 个答案:

答案 0 :(得分:2)

尝试将MapRoute置于顶部,但为约束添加fourth parameter,如下所示:

new { controller = "regex-for-!=-AppServer" }

这样,在创建链接时,帮助程序将使用找到的第一个路径,但ServiceRoute将跳过并处理对“/ AppServer”的传入请求。