前言
目录
iis下有一个metabase文件,可通过网站—》属性—》主目录—》配置—》映射中添加、修改、删除。
图1
iis会检查请求文件是否在metabase文件中有对应的处理应用程序。default.aspx对应的是aspnet_isapi.exe来处
理(所以执行文件路径为aspnet_isapi.exe的文件均由它处理),然后aspnet_isapi.exe就把请求转发到asp.net工作进
程。跳到管道模型的httpapplication中(之前还有很多步骤,这里着重讲解httpapplication后面的步
骤),httpapplication根据url的后缀名调用相应的httphandlerfactory(默认情况下.aspx调用
system.web.ui.pagehandlerfactory,.ashx调用
system.web.ui.simplehandlerfactory),然后httphandlerfactory在生成default.aspx具
体的httphandler实例。
之前一直迷失在如何配置的问题上,这里先说明白吧!
下面是自定义httphandler时配置的根据:
iis进行第一次筛选,httpapplication进行第二次筛选。所以
1.自定义时要配置iis让它把对应的文件后缀映射到asp_isapi.exe来处理;
2.在应用程序级web.config中配置<httphandlers>节点使httpapplication能根据配置把请求交由相应的httphandlerfactory或httphandler处理。
具体web.config配置:
verb:请求动作(get,post,*);
path:文件路径(*通配符);
type:,前的参数为自定义httphandler或httphandlerfactory的完整类名(含命名空间),,后的参数为自定义httphandler或httphandlerfactory所在的程序集名(不含dll后缀)。
定义一个继承ihttphandler接口的类并实现接口的方法:
1.processrequest方法就是具体处理请求的地方;
2.isreusable标识该httphandler类的实例对象是否可重用。就是当第一个请求发送过来时,实例化一个httphandler实
例对象,如果isreusable为true,那么第二个请求发送过来时就可以用回该实例对象而不用重新构造一个,如果为false就要重新构造一个实
例。(有点啰嗦了(*^__^*) 嘻嘻……)一般返回true,提高效率嘛!!
web.config中配置
iis中配置,在图1中添加一项映射项,扩展名为.gif,可执行文件路径为c:\windows\microsoft.net
\framework\v2.0.50727\aspnet_isapi.dll,动作为全部动作,然后把“确定文件是否存在”的复选框取消选中(如果选
中了,就必须由对应的文件存在才能处理,如url为a.gif,就必须有a.gif文件真实存在,否则就返回404)。
注意:自定义的httphandler必须放在其他项目工程中,然后引用到web项目中,也就是说配置文件中的type的程序集名称必须写,否则无法执行。
定义一个继承ihttphandlerfactory接口的类并实现接口的方法:
1.gethandler获取新的具体的httphandler实例;
2.releasehandler使工厂可以重用现有的处理程序实例。
这里不用配置myhandler。