HttpModule和HttpHandler
2014-03-31 09:59
190 查看
在asp.net中也分黑白二派,HttpModule像一个土匪,什么请求都要去检查一下,HttpHandler点名只做某一个具体的事,有趣的是:HttpContext真像个大人物,黑白道的人物有时都要找它帮忙。 帮什么忙呢?可怜的土匪没有仓库,它有东西没地方存放,只能存放在HttpContext那里, 有时惹得Handler也盯上了它,去HttpContext去拿土匪的战利品
1 HttpHandler
一个HttpHandler用于响应一类特定的请求(如处理所有的Html文件),使用HttpHandler的目的是为了生成响应结果
常用的使用HttpHandler的页面有:
aspx页面, 响应请求,输出Html结果
asmx服务文件, 响应服务调用
ashx文件, 实现简单的ajax调用
2 HttpModule
一个HttpHandler用于处理一类特殊的请求,每个aspx,ashx都可以看做是一类请求,有时我们发现所有的页面需要进行相同的检查功能(如身份检查).使用HttpHandler会进行重复的操作.这时需要HttpModule来进行处理,设计HttpModule的目的就是为了提供一个灵活的方法来解决重用问题.它采用事件观察者形式,将每个HttpHandler都需要的功能都抽取出来,形成不同的观察者类型,Asp.net中可以通过在配置文件中自由配置我们需要的HttpModule,(WebConfig中的modules节点)
以下是IHttpModule接口定义
public interface IHttpModule
{
// 初始化模块,并使其为处理请求做好准备。
void Init(HttpApplicationapp);
void Dispose();
}
由接口可以看出,HttpModule的Init()方法传入参数是HttpApplication对象,这样HttpModule就可以订阅所有的HttpApplication事件了
public class SetOutputCacheModule : IHttpModule
{
public void Init(HttpApplication app)
{
app.PreRequestHandlerExecute += new EventHandler(app_PreRequestHandlerExecute);
}
void app_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Dictionary<string, OutputCacheSetting> settings = ConfigManager.Settings;
if( settings == null )
throw new ConfigurationErrorsException("SetOutputCacheModule加载配置文件失败。");
// 实现方法:
// 查找配置参数,如果找到匹配的请求,就设置OutputCache
OutputCacheSetting setting = null;
if( settings.TryGetValue(app.Request.FilePath, out setting) ) {
setting.SetResponseCache(app.Context);
}
}
这个Module用于给一些配置文件中需要缓存的文件设置输入缓存
HttpModule能做什么事:
修改某些请求(如上文中的修改响应头)
检查请求(如身份检查)
HttpModule能处理哪些请求
默认是全部进入Asp.net的请求
如果只是处理部分请求,自行判断
3 三大对象总结
在请求的处理过程中,HttpApplication对象主要扮演着控制管线处理流程的作用,它负责推进整个处理流程,除了在不同的阶段引发不同的事件外(事件做为一个委托供HttpModule调用),HttpApplication对象会根据当前的请求寻找一个合适的IHttpHandlerApplication实例,并最终得到一个IHttpHandler实例用于处理请求.设计这个三个象的目的在于:
1 HttpApplication控制处理流程,在不同的阶段引发不同的事件
2 由于请求的多样性,每个请求会由一个HttpHandler对象处理
3 对于一些通用性请求,尤其是与响应无关的请求,用HttpModule比较合适
1 HttpHandler
一个HttpHandler用于响应一类特定的请求(如处理所有的Html文件),使用HttpHandler的目的是为了生成响应结果
常用的使用HttpHandler的页面有:
aspx页面, 响应请求,输出Html结果
asmx服务文件, 响应服务调用
ashx文件, 实现简单的ajax调用
2 HttpModule
一个HttpHandler用于处理一类特殊的请求,每个aspx,ashx都可以看做是一类请求,有时我们发现所有的页面需要进行相同的检查功能(如身份检查).使用HttpHandler会进行重复的操作.这时需要HttpModule来进行处理,设计HttpModule的目的就是为了提供一个灵活的方法来解决重用问题.它采用事件观察者形式,将每个HttpHandler都需要的功能都抽取出来,形成不同的观察者类型,Asp.net中可以通过在配置文件中自由配置我们需要的HttpModule,(WebConfig中的modules节点)
以下是IHttpModule接口定义
public interface IHttpModule
{
// 初始化模块,并使其为处理请求做好准备。
void Init(HttpApplicationapp);
void Dispose();
}
由接口可以看出,HttpModule的Init()方法传入参数是HttpApplication对象,这样HttpModule就可以订阅所有的HttpApplication事件了
public class SetOutputCacheModule : IHttpModule
{
public void Init(HttpApplication app)
{
app.PreRequestHandlerExecute += new EventHandler(app_PreRequestHandlerExecute);
}
void app_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Dictionary<string, OutputCacheSetting> settings = ConfigManager.Settings;
if( settings == null )
throw new ConfigurationErrorsException("SetOutputCacheModule加载配置文件失败。");
// 实现方法:
// 查找配置参数,如果找到匹配的请求,就设置OutputCache
OutputCacheSetting setting = null;
if( settings.TryGetValue(app.Request.FilePath, out setting) ) {
setting.SetResponseCache(app.Context);
}
}
这个Module用于给一些配置文件中需要缓存的文件设置输入缓存
HttpModule能做什么事:
修改某些请求(如上文中的修改响应头)
检查请求(如身份检查)
HttpModule能处理哪些请求
默认是全部进入Asp.net的请求
如果只是处理部分请求,自行判断
3 三大对象总结
在请求的处理过程中,HttpApplication对象主要扮演着控制管线处理流程的作用,它负责推进整个处理流程,除了在不同的阶段引发不同的事件外(事件做为一个委托供HttpModule调用),HttpApplication对象会根据当前的请求寻找一个合适的IHttpHandlerApplication实例,并最终得到一个IHttpHandler实例用于处理请求.设计这个三个象的目的在于:
1 HttpApplication控制处理流程,在不同的阶段引发不同的事件
2 由于请求的多样性,每个请求会由一个HttpHandler对象处理
3 对于一些通用性请求,尤其是与响应无关的请求,用HttpModule比较合适
相关文章推荐
- HttpModule与HttpHandler详解(转)
- HttpModule & HttpHandler
- HttpHandler和HttpModule
- 关于HttpHandler与HttpModule的理解和应用方法
- ASP.NET页面执行顺序 (HttpModule,HttpHandler)
- HttpModule,HttpHandler,HttpHandlerFactory简单使用
- 选择HttpHandler还是HttpModule?
- 模块和处理程序之通过HttpModule和HttpHandler拦截入站HTTP请求执行指定托管代码模块
- HttpModule和HttpHandler
- HttpModule与HttpHandler详解
- HttpHandler与HttpModule的用处与区别
- C#强化系列文章八:HttpModule,HttpHandler,HttpHandlerFactory简单使用
- HttpHandler与HttpModule的用处与区别
- ASP.NET---HttpHandler 和 HttpModule
- HttpHandler与HttpModule的理解与应用
- HttpModule与HttpHandler详解
- HttpHandler与HttpModule的用处与区别
- HttpModule与HttpHandler详解(转)
- 深入理解HttpModule和HttpHandler
- IIS & HttpModule & HttpHandler 关系