【问题标题】:asp.net mvc legacy route mappingasp.net mvc 遗留路由映射
【发布时间】:2010-11-08 13:55:30
【问题描述】:

我有一个旧的 asp.net 网站,我正在迁移到 asp.net mvc。

我想将现有的 url 永久重定向到 asp.net mvc 控制器。我有这些链接的新位置视图的控制器,我想在现有页面上执行 301 重定向到新视图。

我有两种不同类型的网址:

  1. http://foosite.com/privacy.aspx
  2. http://foosite/bar/content-name

类型 2 url 是 asp.net mvc 路由处理之前现有 url 重写器模块的结果。

我有现有的重定向代码:

Response.Clear();
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", url);
Response.End();

我应该在哪里进行重定向?

我看到两个选项:

Application_BeginRequest - 使用正则表达式解析 url

我喜欢它的地方:

  • 我已经在这里检查大写 URL 以重定向到小写 URL
  • 我有机会直接处理响应,而无需返回 ActionResult

我不喜欢它的地方:

  • 必须将顶部的 URL 类型 #2 映射到新的控制器/视图中,这意味着我需要做一些数据库工作来获取 url 的路径

控制器操作 - 使用路由和控制器进行重定向

我喜欢它的地方:

  • 我可以干净地完成我需要的数据库工作

我不喜欢它的地方:

  • 控制器需要返回一个视图,我直接操作Response流创建301。

任何建议都会很棒,谢谢。

【问题讨论】:

    标签: c# asp.net-mvc url-rewriting


    【解决方案1】:

    在这两个选择中,我会选择控制器动作。 需要控制器来返回视图——我相信您甚至可以使用 ASP.NET MVC 使控制器方法返回 void。我喜欢这个选项的原因是因为数据库交互——我认为在 BeginRequest 中启动数据库会影响整体性能。

    如果这不是问题,我认为将其与其余路由信息放在一起最有意义(即与 BeginRequest 一起)。

    【讨论】:

    • 我也一直倾向于控制器。不调用 global.asax 中的服务层是卖给我的。奇怪的部分是直接弄乱了响应并返回一个空视图。
    • 您是否考虑返回 RedirectToAction 或类似的东西?
    • 我真的不想重定向到一个动作,对吧?我想发送 301 的 http 响应并让浏览器处理重定向。
    • 您能根据您的建议发布一些示例吗?我有一个类似的问题正在处理stackoverflow.com/questions/1320041/…
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2012-09-03
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多