快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
BeginRequest 事件:

public class QdigSEFModule : IHttpModule
{
  public void Init(HttpApplication application)
  {
    application.BeginRequest += new EventHandler(OnBeginRequest);
  }
  ...
}

然后,在 OnBeginRequest 方法中实现重写功能,如图 6 所示。

Figure 6 Rewriting URLs

public void OnBeginRequest(Object source, EventArgs e)
{
  HttpApplication app = (HttpApplication)source;
  HttpContext context = app.Context;
  // Extract the gallery path and image filename from the url
  // code omitted for clarity ...
  // Build the rewritten url
  String rewrittenUrl = String.Format("~/index.php?Qwd=.{0}&Qif={1}",
                    galleryPath,
                    imageFileName);
  String originalQueryString =   
       context.Request.ServerVariables["QUERY_STRING"];
  if (!String.IsNullOrEmpty(originalQueryString))
  {
    rewrittenUrl += "&" + originalQueryString;
  }
  // Rewrite the url
  context.Server.TransferRequest(rewrittenUrl);
}

请注意 HttpServerUtility.TransferRequest 的使用,这是 .NET Framework 3.5 中的新 ASP.NET API,用于保证 IIS 7.0 ASP.NET 集成管道中的正确重写。此 API 强制停止针对当前请求的请 求处理,并执行对目标 URL 新的子请求。这使托管模块可以向另一个 URL 完整地传输请求处理,而不管 目标内容类型为何。您可以在本期的下载中找到此模块的完整源代码。

编写完该模块后,我需要 将它部署到应用程序中。有多种部署方法,包括将该模块编译到一个 .NET 程序集,然后将该程序集部署 到应用程序的 BIN 目录中。不过,我宁愿采用最简便的方法:只复制该模块的源代码,并将其作为 QdigSEFRewriter.cs 保存到应用程序 App_Code 子目录中。在应用程序启动过程中,ASP.NET 编译系统 会自动编译该代码,使 ASP.NET 运行时能够使用它。

最后一步是使该模块能够在应用程序中运行 ,具体方法是在应用程序的 web.config 文件的 <modules> 配置区段中注册该模块,默认情况下 ,该区段中已经注册了许多内置的 ASP.NET 模块,比如表单身份验证等。在为访问控制而创建的 web.config 文件上,我可以添加新模块,如下所示:

<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" />
  </modules>
</system.webServer>

从现在开始,您可以使用友好的 URL 替代 Qdig 本机查询字符串 URL 来访问 Qdig 图库了。若要访问图库 Mike 子目录中的 Flower.jpg 文件,只需按如下所示请求该文 件即可:

http://myphpgallery/Mike/Flower.jpg/show

请注意,我为友好的 URL 选 用了 /show 后缀,以便与指向图像文件的直接链接区分开来,并防止我的模块重写它并未打算重写的 URL。当然,您也可以按照适合您需要的方式修改重写方案。

生成友好超链接

不幸的是, 这还没有全部完成。虽然现在可以使用友好的 URL 访问图库,但图库页面本身仍包含旧格式的超链接:

<a href="http://index.php?

Qwd=./Mik

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号