快速业务通道

IIS 7.0: 使用集成的ASP.NET管道增强应用程序

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
e&amp;Qif=Arctica.jpg&amp;Qiv=thumbs&amp; 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号