【问题标题】:MVC3 Reverse RoutingMVC3 反向路由
【发布时间】:2012-06-20 17:49:55
【问题描述】:

我正在进行一个项目,将旧的 .aspx 页面转换为新的 MVC 页面。我目前正在使用路由功能来映射现有的旧页面以在幕后使用较新的 MVC 页面。这很好用,因为它保留了现有的 URL,但是,每当控制器需要重定向用户或使用 MVC Url.Action 链接时,它将用户发送到的 URL 是 MVC url,而不是路由的旧页面 url .我意识到这是开箱即用的假设方式,但我想知道 MVC 是否具有某种“反向路由”功能。通过反向路由,我正在寻找允许 Url.Action("action") 以指定操作返回路由的 .aspx 关联 url 而不是默认的 /controller/action 链接的东西。

例如,

这是一个示例路线

context.MapRoute("AboutUs", "pages/aboutus.aspx", new { controller = "default", action = "aboutus" });

这使得 domain.com/pages/aboutus.aspx 可以在幕后完美地从 DefaultController 运行新的 MVC 操作“aboutus”。

但是,如果在另一个 MVC 页面上我有一个由

创建的链接
Url.Action("aboutus")

它将它们指向 domain.com/mvc/aboutus。我希望它指向 domain.com/pages/aboutus.aspx 以保持整个站点的一致性。

感谢您提供的任何见解。我可能最终不得不重写 Url.Action 方法来查找路由并返回映射的 url,但我只是想检查现有功能,所以我不会重新发明轮子。

【问题讨论】:

  • 这可能是一个愚蠢的问题,但为什么要将用户重定向回您要替换的网址?如果进行此映射的唯一原因是保留指向您网站的现有链接/书签,那么您的用户找到您的网站就足够了,不是吗?
  • 好问题。这并不是说我将它们重定向回那些页面,因为 MVC 无论如何都在旧的 .aspx 页面后面运行。我想完成这个主要是为了让用户在浏览网站时不会在地址栏中看到不同的 URL。我还担心搜索引擎不喜欢我在两个不同的页面上有“重复内容”,但我现在意识到规范 URL 可以解决这个问题。 joshuam 建议使用 Url.RouteUrl("aboutus") 完美地做到了这一点。感谢大家的帮助和意见!
  • 另外,如果这有助于任何人通过 Google 找到它。 CakePHP 有类似的功能,他们称之为“反向路由”。 CakePHP 更自动地处理它,但我也喜欢微软所做的。

标签: asp.net-mvc-3 asp.net-mvc-routing


【解决方案1】:

尝试使用 RouteUrl 扩展方法,该方法通过路由名称而不是路由参数匹配路由,如下所示:

Url.RouteUrl("aboutus") // route name

MSDN:http://msdn.microsoft.com/en-us/library/dd460347

【讨论】:

  • 这正是我想要的。另外,对于我正在使用的控制器中的重定向: return RedirectToRoute("action");
猜你喜欢
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 2012-05-25
相关资源
最近更新 更多