【问题标题】:Using Application_BeginRequest for url rewriting使用 Application_BeginRequest 进行 url 重写
【发布时间】:2008-12-01 11:37:26
【问题描述】:

到目前为止,我们一直在使用自定义 404 页面重写 URL:该 url 不会映射到站点中的任何文件,我们配置 IIS 以将 404 错误发送到将这些 url 重定向到正确的 aspx 页面网址。
现在我们要停止使用重定向,所以在阅读了 Scott Guthrie 关于 Url Rewriting 的文章后,我想在 Global.asax 中使用 Application_BeginRequest。问题是我们的很多 url 都没有被重写,并且可以在没有任何干预的情况下到达正确的位置。我担心现在每个请求都必须通过 Application_BeginRequest 方法(甚至是未重写的 url),我担心这会减慢它们的加载时间。
你怎么看?使用 Application_BeginRequest 时加载时间是否存在问题?

【问题讨论】:

    标签: asp.net url-rewriting


    【解决方案1】:

    无论如何,每个请求都会通过 Application_BeginRequest。

    您需要添加一些逻辑,以便只更改需要重写的页面。

    那一点点逻辑不会很昂贵。

    我用过,完全没有注意到性能下降。

    【讨论】:

      【解决方案2】:

      如果您要更频繁地使用它并且模仿 Apache 模块 mod_rewrite,那么有非常强大的解决方案,我喜欢这个,因为我已经使用它并且它没有给我带来任何问题:

      http://www.codeplex.com/IIRF

      或:

      http://urlrewriter.net/

      http://www.managedfusion.com/products/url-rewriter/

      您可以在这篇文章中阅读更多选项:

      ASP.NET URL Rewriting

      正如乔希所说,重要的文章是: http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

      【讨论】:

      【解决方案3】:

      只是给可能遇到问题的其他人的便条。确保有

      <modules runAllManagedModulesForAllRequests="true">
      

      在您的 web.config 中

      【讨论】:

        【解决方案4】:

        那篇文章有点老了……现在.NET 框架中有更好的方法。有趣的是,我曾经完全按照你在做的事情(劫持错误处理程序)。

        http://www.singingeels.com/Blogs/Nullable/2007/09/14/URL_ReWriting_The_Right_Way_Its_Easy.aspx

        这就是我认为你现在想做的事情。哦,关于性能...这会增加您的页面时间大约 0.00001 秒。

        【讨论】:

        • 好的,然后继续使用 Guthrie 的东西……性能损失仍然可以忽略不计。
        【解决方案5】:

        Scott Guthrie 的article 很好,但我很好奇您为什么选择通过 Global.asax 来执行此操作,而不是像他建议的那样使用 HttpModule。此外,无论如何,Asp.Net 页面生命周期都会贯穿 Global.asax 中的每一个事件。

        HttpModule 事件运行每一个请求,只要你没有在你的逻辑中做任何疯狂的事情,那么你应该很高兴。甚至 Application_BeginRequest 方法中的数据库查找也可以通过适当的缓存来缓解。

        如果有疑问,请将一些信息写到Trace,以便准确了解您的日常工作需要多长时间。我想您会发现,与您最昂贵的操作(数据库查找)相比,时间可以忽略不计。

        【讨论】:

        • 重写的逻辑相当复杂,从我收集到的关于 HttpModule 的信息来看,这样做看起来并不容易。另外,global.asax 已经在项目中了,我不需要添加任何 dll。
        猜你喜欢
        • 1970-01-01
        • 2011-03-06
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 2011-03-06
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多