asp.net mvc遗留路由映射

时间:2009-07-07 03:20:29

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

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

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

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

  1. http://foosite.com/privacy.aspx
  2. http://foosite/bar/content-name
  3. 类型2网址是asp.net mvc路由处理之前现有网址重写器模块的结果。

    我有现有的重定向代码:

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

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

    我看到两个选项:

    Application_BeginRequest - 使用正则表达式解析网址

    我喜欢它:

    • 我已经检查了大写网址以重定向到这里的小写网址
    • 我有机会直接使用响应而无需返回ActionResult

    我不喜欢它:

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

    控制器操作 - 使用路线&控制器进行重定向

    我喜欢它:

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

    我不喜欢它:

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

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

1 个答案:

答案 0 :(得分:3)

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

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