ASP.NET URL重映射和重定向 - 需要最佳实践

时间:2010-07-30 18:34:01

标签: c# asp.net httpmodule server.transfer

这是一个场景:我有一个大约5000个URL的列表,这些URL已经发布给不同的客户。现在,所有这些URL的位置在我的服务器端都发生了变化。服务器仍然是相同的。这是一个带有.NET3.5 / C#的ASP.NET网站。

我的要求是:虽然客户使用较旧的源URL,但应将其重定向到新的URL,而不会发生任何可察觉的更改或中间重定向消息等。

我试图理解整个场景:

  1. 我将旧URL的实际映射放在新数据库中 - 在数据库或某个配置中。文件还是有更好的选择?

  2. 我如何实际实施重定向:
    我应该用Server.Transfer或Response.Redirect写一个方法吗?
    它是否有最好的做法 - 在HTTPModules中放置实际的重新路由..或者它是Application_BeginRequest吗?

  3. 我希望通过符合最佳实践的方法和非常低的性能降级来实现(如果有的话)。

3 个答案:

答案 0 :(得分:2)

如果您的应用程序已经使用了数据库,那么我会使用它。将旧URL作为主键,查找应该非常快。我亲自将整个事物包装在.NET类中,它抽象它并允许您创建Dictionary<string,string>所有可以从DB加载到内存并缓存的URL。这会更快。

绝对不要使用Server.Transfer。相反,您应该进行301 Permanently Moved重定向。这将允许search engines know使用新网址。如果您使用的是.NET 4.0,则可以使用HttpResponse.RedirectPermanent方法。但是,在早期版本中,您必须自己设置标题 - 但this is trivial

答案 1 :(得分:0)

将数据保存在数据库中,但加载到ASP.NET缓存中以减少访问时间。

答案 2 :(得分:0)

您肯定想使用HTTPModules。这是公认的做法,并且最近尝试在Global.asax中做到这一点,我可以告诉你,除非你只想做最简单的东西(即"~/mypage.aspx/3" <-> "~/mypage.aspx?param1=3),它比看起来更复杂和错误

事实上,我很遗憾甚至试图推出自己的URL重写解决方案。如果你想要一些你可以依赖的东西,这是不值得的。 Scott Guthrie有a very good blog post on the subject,他推荐UrlRewriter.netUrlRewriting.net作为一些免费的开源URL重写解决方案。

祝你好运。