asp.net - MVC 路由与服务路由冲突

标签 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相关路由“和平相处”,即不互相影响?

最佳答案

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

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

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

关于asp.net - MVC 路由与服务路由冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036768/

相关文章:

c# - 从数据表中选择两列之间的记录

asp.net - ASP 成员(member)资格奇怪的问题

如果 ModelState 无效,ASP.NET MVC AJAX 更改 UpdateTargetId

mysql - VS2012(MVC 4) 中的数据库从默认 SQL Express LocalDb)v11.0 迁移到 MySQL

asp.net-mvc - 授权属性的 MVC5 声明版本

asp.net - 有什么方法可以清除/刷新/删除OutputCache?

c# - 为什么我在运行 Response.Redirect() 时会抛出异常?

c# - 当结构不匹配时,在 C# 中组合两个对象列表

asp.net - 在 Visual Studio 2008 中调试 HTTPS ASP.NET 站点?

c# - ASP.net AutoMapper 缺少类型映射配置或不支持的映射