扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
使用HttpHandler来调用网址重写
除了上面所述方法外,网址重写也可以放入HttpHandler或者HttpHandlerFactory中调用。HttpHandler是一个负责针对特定请求生成相应内容的类,而HttpHandlerFactory返回一个HTTP的实例,该实例针对特定请求生成相应内容。
本节将着眼于为这些ASP.NET页面创建一个网址重写的HttpHandlerFactory。创建HttpHandlerFactory必须实现IHTTPHandlerFactory接口,它包括一个GetHandler()方法。ASP.NET引擎在初始化这些HttpModule后做出决定针对该请求调用相应的HttpHandler或者HttpHandlerFactory,在调用HttpHandlerFactory的时候,针对该Web请求以及随同的其他信息的HttpContext中经过的的HttpHandlerFactory的GetHandler()方法将被ASP.NET引擎调用,HttpHandlerFactory必须返回一个能委托该请求的对象,并且该对象要能实现IHttpHandler接口。
要通过一个HttpHandler来调用网址重写,可以先创建一个HttpHandlerFactory,它的GetHandler()方法检查所请求的网址并决定是否需要调用网址重写。如果要调用网址重写的话则调用前文所述的已通过检查的HttpContext对象的RewritePath()方法。最后该HttpHandlerFactory返回一个由类System.Web.UI.PageParser的GetCompiledInstance()方法返回的HttpHandler。(这与内嵌于ASP.NET页面的HttpHandlerFactory(PageHandlerFactory)的工作原理相同。)
在所有HttpModule被初始化后,HttpHandlerFactory就开始被实例化。把网址重写放在这些事件场所的最后一个里头调用的时候,也会碰到相同的问题:文件授权将会失效。如果非要依赖于Windows验证和文件验证的时候,你可能得使用HttpModule来调用网址重写了。
下一章我们着眼于如何构建一个可重用的网址重写引擎,使用下文所提的这些示例均以真实案例作为参照,在作者主页上提供下载。先用用一个简单的网址重写的例子来探讨如何实现网址重写,紧接着将利用网址重写引擎中正则表达式的强大处理能力来展示真正“隐蔽”的网址重写技术!
使用网址重写引擎实现简单的网址重写
为了便于在Web应用程序中实现网址重写,我构建了一个网址重写引擎,该引擎提供下列功能:
·可以在web.config文件中为页面开发者定义其所使用的网址重写引擎的规则;
·通过使用正则表达式来使所制定的网址重写规则具有更加强大的重写能力;
·能够通过简单配置即可在HttpModule和HttpHandler中使用网址重写。
本节只探讨通过HttpModule来实现网址重写,要了解如何通过HttpHandler来实现网址重写请下载本文提供的代码。
1. 设置网址重写引擎的配置信息
我们来探讨一下在web.config中网址重写规则的配置节。首先必须在web.config文件中指出是否需要在HttpHandler或者HttpModule中调用网址重写,在web.config中,下文已经包含了两个已经被注释掉的配置节:
<!--
<HttpModules>
<add type="URLRewriter.ModuleRewriter,URLRewriter" name="ModuleRewriter"/>
</HttpModules>
-->
<!--
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler,URLRewriter" />
</httpHandlers>
-->
被注释掉的<HttpModules>为配置使用HttpModule调用网址重写;注释掉的<httpHandler>为配置使用HttpHandler调用网址重写。
不论配置使用<HttpModules>还是<httpHandlers>调用网址重写,除此之外还须配置网址重写规则,一条重写规则包括两项字符串:请求URL中的查找模式和针对该模式的匹配成功后的替换字符串。该信息在web.config文件中用下列标签描述:
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>pattern to look for</LookFor>
<SendTo>String to replace pattern with </SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>pattern to look for</LookFor>
<SendTo>String to replace pattern with </SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者