IIS 7.0: 使用集成的ASP.NET管道增强应用程序
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |