2009-07-07 88 views
4

我有一个传统的asp.net网站我正在迁移到asp.net mvc。asp.net mvc传统路由映射

我想将现有的网址永久重定向到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重定向到小写的网址
  • 我有机会直接处理响应而无需返回ň的ActionResult

我不喜欢它什么:

  • URL类型#2从上必须映射到新的控制器/视图,这意味着我需要做一些数据库努力获取路径的URL

控制器动作 - 使用路由&控制器做重定向

我喜欢它:

  • 我可以做干净的数据库的工作,我需要

我不喜欢它什么:

  • 的控制器需要返回一个视图,而我直接操纵响应流来创建301.

任何建议将是伟大的,谢谢。

回答

3

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

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

+0

我一直倾向于控制器。不在global.asax中调用服务层是我的卖点。奇怪的部分直接与Response相混淆并返回一个空视图。 – blu 2009-07-09 19:14:28