到目前为止,我们一直在使用自定义 404 页面重写 URL:该 url 不会映射到站点中的任何文件,并且我们将 IIS 配置为将 404 错误发送到将这些 url 重定向到正确 URL 的 aspx 页面。
现在我们要停止使用重定向,所以在阅读了 Scott Guthrie 关于 Url Rewriting 的文章后,我想在 Global.asax 中使用 Application_BeginRequest。问题是我们的很多 url 都没有被重写,并且可以在没有任何干预的情况下到达正确的位置。我担心现在每个请求都必须通过 Application_BeginRequest 方法(甚至是未重写的 url),我担心这会减慢它们的加载时间。
你怎么看?使用 Application_BeginRequest 时加载时间是否存在问题?
5 回答
无论如何,每个请求都会通过 Application_BeginRequest。
您需要添加一些逻辑,以便只更改那些需要重写的页面。
那一点点逻辑不会很昂贵。
我已经使用了它,并且根本没有注意到性能下降。
如果您要更频繁地使用它并且模仿 Apache 模块 mod_rewrite,那么有非常强大的解决方案,我喜欢这个,因为我已经使用过它并且它没有给我带来任何问题:
或者:
http://www.managedfusion.com/products/url-rewriter/
您可以在这篇文章中阅读更多选项:
正如乔希所说,基本文章是: http ://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
只是给可能遇到麻烦的其他人的便条。确保拥有
<modules runAllManagedModulesForAllRequests="true">
在你的 web.config
那篇文章有点老了......现在.NET框架中有更好的方法。有趣的是,我曾经完全按照您正在做的事情(劫持错误处理程序)。
http://www.singingeels.com/Blogs/Nullable/2007/09/14/URL_ReWriting_The_Right_Way_Its_Easy.aspx
这就是我认为你现在想做的事情。哦,关于性能......这会使您的页面时间增加约 0.00001 秒。
Scott Guthrie 的文章是一篇不错的文章,但我很好奇您为什么选择通过 Global.asax 执行此操作,而不是像他建议的那样使用 HttpModule。此外,无论如何,Asp.Net 页面生命周期都会贯穿 Global.asax 中的每一个事件。
HttpModule 事件运行每一个请求,只要你没有在你的逻辑中做任何疯狂的事情,那么你应该很高兴。甚至 Application_BeginRequest 方法中的数据库查找也可以通过适当的缓存来缓解。
如有疑问,请将一些信息写入Trace以准确了解您的例行程序需要多长时间。我想您会发现,与您最昂贵的操作(数据库查找)相比,时间可以忽略不计。