IIS 7.0: 使用集成的ASP.NET管道增强应用程序
e&Qif=Arctica.jpg&Qiv=thumbs&
Qis=M" title="First Image"> ... </a>
用户单击这些链接时仍将 看到不雅观的查询字符串 URL,搜索引擎索引内容时也不能将父页面的友好 URL 与页面正文中的链接关 联起来。 让 Qdig 生成的超链接采用我在前面步骤中使用的同样友好的 URL,就会真正实现便利 性。但为此而需要重写 PHP 脚本来生成不同的超链接,这是我不愿意做的。 实际上我不需要这么 做,这多亏了 ASP.NET 响应筛选功能。我可以编写另一个托管模块,该模块动态地筛选 Qdig 响应,将 旧格式的超链接替换为友好的新格式链接。 这一次,我的模块将完成下列功能: 订阅请求 处理的 PreRequestHandlerExecute 阶段(刚好在处理程序执行前)。 检查 URL 是否适用于 Qdig index.php 脚本。 在响应上设置响应筛选流,这将使用正则表达式替换所有友好的超链接。 该模块类相当简单,因为它的全部工作就是有选择性地绑定筛选流(请参见图 7)。真正的工作 是在 QdigSEFFilter 类中完成的,该类负责将所有的 Qdig 超链接替换为采用新格式的超链接。筛选器 类会实现抽象的 System.IO.Stream 类,ASP.NET 运行时用它来在请求处理结束时筛选响应。ASP.NET 集 成管道引擎允许响应筛选器处理任何响应,甚至那些不是由 ASP.NET 生成的响应,所以,只要缓存了响 应,就可用它来处理 PHP 响应以及静态文件和 ASP 页面。IIS 7.0 在默认情况下缓存所有响应(直至达 到配置的极限),从而确保该机制可以正常工作。 Figure 7 Generating Friendly Hyperlinks public class QdigSEFFilterModule : IHttpModule { public void Init(HttpApplication application) { application.PreRequestHandlerExecute += new EventHandler( OnPreRequestHandlerExecute); } public void Dispose(){} public void OnPreRequestHandlerExecute(Object source, EventArgs e) { HttpApplication app = (HttpApplication)source; HttpContext context = app.Context; if (context.Request.Path.Equals( VirtualPathUtility.ToAbsolute("~/index.php"))) { // wire up the response filter context.Response.Filter = new QdigSEFFilter(context); } } } 我的筛选器实现将缓存通过响应流推送的所有传入响应字节,使用响应的字符集将它们转换为 一个字符串,然后对 URL 执行正则表达式替换。随后,它将该字符串重新编码为原始字符集,并将响应 数据推送回运行时。您可以在代码下载中找到该模块和响应筛选器的完整实现。 我再次将模块代 码作为单独的源文件 QdigSEFFilter.cs 部署到 App_Code 目录中,并在应用程序的 web.config 文件的 <modules> 配置区段中注册该模块。此时的 modules 区段如下所示: <system.webServer> <modules> <remove name="FormsAuthentication" /> <add name="FormsAuthentication" type= "System.Web.Security.FormsAuthenticationModule" /> <!-- Add the SEF url rewriting module --> <add name="QdigSEFUrlsModule" type="QdigModules.QdigSEFModule" /> <!-- Add the response filter module --> <add name="QdigSEFFilterModule" type= "QdigModules.QdigSEFFilterModule" /> </modules> </system.webServer |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |