日期:2014-05-17 浏览次数:20707 次
<httpHandlers> <!--page="文件夹/*.aspx"要放在第一条,因为从上面检测下来,当遇到.aspx后缀名的都交给MyHander执行--> <add verb="*" path="*.aspx" type="MYL.SQL.MyHander,MYL.SQL"/> <add verb="*" path="文件夹/*.aspx" type="System.Web.UI.PageHandlerFactory" /> </httpHandlers>
------解决方案--------------------
对于aspx页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。当一个HTTP请求到达这个HttpHandlerFactory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。 一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。
.NET为asp.net提供了很多系统默认HttpHandler类,用来适应不同类型的HttpRequest。比如aspx,在machine.config中是这样定义的:
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
这就说明遇到aspx的Request请求,asp.net会将其交给System.Web.UI.PageHandlerFactory的HttpHandler类来处理。
<add verb="*" path="Handler1.aspx" type="MyHandler.MyHandlerFactory, MyHandler"/>
<add verb="*" path="Handler2.aspx" type="MyHandler.MyHandlerFactory, MyHandler"/>
</httpHandlers>
到这里,针对Handler1.aspx和Handler2.aspx两个页面的http请求就通过HttpHandler工厂处理
------解决方案--------------------
有个细节LZ注意一下:
HttpModule:如果定义了多个HttpModule,在web.config文件中引入自定义HttpModule的顺序就决定了多个自定义HttpModule在处理一个HTTP请求的接管顺序。
HttpHandler:HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系.
一个是按顺序处理,一个是只处理一次的.所以下面的httpHandlers配置中,path="文件夹/*.aspx"不会执行上面的注入处理.
<httpHandlers>
<add verb="*" path="*.aspx" type="MYL.SQL.MyHander,MYL.SQL"/>
<add verb="*" path="文件夹/*.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
PS:推荐一文章
http://www.cnblogs.com/chenlulouis/archive/2009/12/18/1626918.html