您的位置:首页 > 理论基础 > 计算机网络

HTTP Modules简介及典型用法

2007-11-28 15:17 288 查看
HTTP Modules是一个程序集,对程序的每个请求时,都会调用它.HTTP Modules是asp.net请求管道的一部分,且在能在请求的整个生命周期里存取事件.因此HTTP Modules给你一个检查到达请求和采取行动的机会.他们也提供了检查外来请求和修改请求的机会.

asp.net HTTP Modules和ISAPI过滤器很像,他们都可获得所有请求.然而,他们是用托管代码编写且完全集成在asp.net程序的生命周期里.

HTTP Modules的典型用法

安全:由于你可以检测到达的请求,你的HTTP Modules在请求页面,web service或调用handler前,可以执行自定义的认证或其他安全检查.

统计和日志:由于HTTP Modules在每次请求前调用,你可以在一个集中的组件获得请求统计和日志信息而不是单独的页面.

自定义的页眉或页尾:由于你可以修改外来的请求,你能注入自定义的页眉信息到每个页面或web service请求.

asp.net使用组件(Modules)实现各种各样的程序特点,包括forms认证,缓存,session状态和客户端脚本服务.在每 种情况下,当这些服务可用时,组件作为请求的一部分调用且执行单个页面以外的任务.组件可以使程序事件消失,也可以创建那些可以在global.asx中 发起的事件.

注意:http modules和http handlers不同.http modules在所有的请求和响应中调用,而http hanlders仅仅在相应和特定的请求中调用.

http modules是如何工作的

在web.config文件中注册一个的自定义的http modules.当asp.net创建了httpapplication类的实例描述你的程序时,任何被注册的modules也被创建了实例.当一个 modules被创建,它的init方法被调用且modules自己会初始化.

在modules的init方法中,你能通过绑定事件到方法,订阅各种程序事件例如:BeginRequest或 EndRequest.当事件发起时,modules中的方法被调用且可以在中实现任何的逻辑处理,例如:身份认证或登陆信息.在事件处理时, modules可以读取当前请求的context property.这能使你重定向请求到另外的页面,修改请求或实现任何其他处理.例如:如果你的modules包含认证,modules可以检测和重定 向到登陆页面或出错页面.当modules的事件处理完成时,asp.net调用管道里的下一个进程,那可能实其他的modules或http handler.

使用http modules?还是用global.asax?

你可以使用global.asax文件实现一个module的功能,它能对程序事件进行相应.然而,用modules而不用 global.asax有一个优点,它能被压缩和创建一次且运行在许多不过的程序里.通过把他们加入到GAC和在machine.config里注册,你 能重用他们在所有的程序中.

然而,用global.asax的优点是你能替代在其他注册module的事件 如:Session_Start and Session_End 中的代码.另外global.asax是你的全局对象在整个程序中可用.

当你需要创建依赖程序事件的代码和你想在其他程序中重用module或不想在global.asax替换复杂的代码,你应该使用module.

你应该在global.acax替换代码当你需要创建依赖程序事件的代码和你不需要在其他程序中重用或你需要订阅如Session_start事件(在modules中是不能订阅的).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: