【问题标题】:ASP.NET URL remapping &redirection - Best Practice neededASP.NET URL 重新映射和重定向 - 需要最佳实践
【发布时间】:2010-07-30 18:34:01
【问题描述】:

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

我的要求是:尽管客户使用旧的源 URL,但他们应该被重定向到新的 URL,而没有任何感知的更改或中间重定向消息等。

我试图理解整个场景:

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

  2. 我将如何实际实现重定向:
    我应该用 Server.Transfer 或 Response.Redirect 编写一个方法吗?
    是否有最佳实践 - 将实际的重新路由放在 HTTPModules 中。或者是 Application_BeginRequest?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • +1 表示不要使用Server.Transfer,这样做会为旧网址返回新内容,这是您绝对不想要的。
    • 感谢您的输入...但是实际路由将在哪里进行或应该放置在哪里? Application_BeginRequest?!
    • 您想使用 HttpModule 进行路由 - 请参阅 support.microsoft.com/kb/307996
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您肯定想使用 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 重写解决方案。

      祝你好运。

      【讨论】:

      • 我正在查看 URL 重定向而不是重写或永久链接。
      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多