简述asp.net的httpApplication,httpModule,httpHandler

这三个都是asp.net站点的重要对象,首先分别为这三个角色定个概念

HttpApplication:这其实就是我们处理一个http请求的完整程序,httpModule及httpHandler对象都是由它来调用的

httpModule:传说中的管道事件就是在这个角色里面进行实现的,可以把它看成是以一个观察者模式外挂在请求流程中的一个通用处理类,HttpApplication在处理请求时,走到每个固定的阶段,都会触发httpModule中注册的相应管道事件,从而进行一些所有请求通用的处理。比如验证身份,加session,记日志等等(MVC中的过滤器也是通过httpModule中的管道事件实现的),自定义的httpModule需实现IHttpModule接口,下面细讲;

httpHandler:我们对请求的实际处理类,你要对这个请求做些什么独特的处理,都会在httpHandler对象中实现(mvc中将请求路由到特定的Controller/Action中也是通过httpHandler来实现的),自定义的Httphandler需实现IHttpHandler接口,下面细讲;

三者关系图如下
简述asp.net的httpApplication,httpModule,httpHandler_第1张图片


下面讲讲怎么样在空项目中声明httpModule与httpHandler来处理自己的请求
1、首选新建一个asp.net的空项目
简述asp.net的httpApplication,httpModule,httpHandler_第2张图片
2、新建处理请求的HttpHandler,只需要将这个类继承IHttpHandler即可
简述asp.net的httpApplication,httpModule,httpHandler_第3张图片我一共声明了4个Handler来处理不同类型的请求
简述asp.net的httpApplication,httpModule,httpHandler_第4张图片
修改Web.config文件,注册HttpHandler(IIS7写在system.webServer节点下,IIS7以下的版本写在system.web下,注意点及说明看注释)
简述asp.net的httpApplication,httpModule,httpHandler_第5张图片
3、新建处理请求的HttpModule,只需要将这个类继承IHttpModule即可,并绑定几个管道事件
简述asp.net的httpApplication,httpModule,httpHandler_第6张图片
我一个新建了两个Module
在这里插入图片描述
修改Web.config文件,注册HttpModule(IIS7写在system.webServer节点下,IIS7以下的版本写在system.web下,注意点及说明看注释)
简述asp.net的httpApplication,httpModule,httpHandler_第7张图片

4、好了,到了这里,我们自己搭建的一个asp.net项目已经基本完成了,我们来运行一下看结果简述asp.net的httpApplication,httpModule,httpHandler_第8张图片
简述asp.net的httpApplication,httpModule,httpHandler_第9张图片
从上面的运行结果,我们可以验证我们前面的几个观点
1、HttpModule中运行是按照注册顺序来执行的,先执行Module2再执行Module1;
2、管道事件只会在请求的对应步骤执行对应的管道事件,而不是根据绑定事件的顺序;
3、一次请求中,会执行所有注册的HttpModule,而HttpHandler只会根据请求的url执行第一个匹配的;


最后加一句:asp.net mvc,asp.net web api,asp.net webForm等,也是在asp.net的基础上做了非常强大的封装而已,本质还是这套asp.net的请求流程


好了,以上就是我的简单理解,参照了非常多的博文才总结出来的,在这就不一一致谢了,最后写了这篇总结以加深自己的印象与理解。

你可能感兴趣的:(简述asp.net的httpApplication,httpModule,httpHandler)