当前位置: 代码迷 >> ASP.NET >> .net 中 httpHandlers 的有关问题
  详细解决方案

.net 中 httpHandlers 的有关问题

热度:1996   发布时间:2013-02-25 00:00:00.0
.net 中 httpHandlers 的问题
<httpHandlers>
  <add verb="*" path="*.aspx" type="MYL.SQL.MyHander,MYL.SQL"/>
</httpHandlers>
我这样是设定了整站的SQL防注入,现在需要将当中某个文件夹下的文件不执行Handler类,有什么办法吗?

------解决方案--------------------------------------------------------
在当前文件夹下再创建个web.config,重写<httpHandlers></httpHandlers>节试试。

------解决方案--------------------------------------------------------
探讨

在当前文件夹下再创建个web.config,重写<httpHandlers></httpHandlers>节试试。

------解决方案--------------------------------------------------------
是某个文件夹下其中的一个文件?
那就在你的代码获取访问页,判断是否等于你不需要执行httphandler的文件
------解决方案--------------------------------------------------------
XML code
<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