---------------------------------HttpModule-------------------------------------------
在请求管道中的事件中注册方法有两种方式:实现接口IhttpModule(过滤器方式),global.asax。
能在其中弄url重写
1 、 在HttpApplication初始化过程中,会根据配置文件web.config加载并初始化相应的HttpModule对象。对于HttpApplication来说,在它处理HTTP请求的不同的阶段会触发不同的事件(Event),而HttpModule的意义在于通过注册HttpApplication的相应的事件,将所需的操作注入整个HTTP请求的处理流程。ASP.NET的很多功能,比如身份验证、授权、缓存等,都是通过相应的HttpModule实现的。
2、
实现了IhttpModule的类就叫做过滤器类,接口中有一个Init(HttpAppliaction context)方法,可以在HttpApplication的事件管道中的某个事件注册方法。
3、HttpModule :订阅管线事件,并在事件处理器中执行所需的相关操作
4、在过滤器中 有 response.end().时,就会结束请求,后面的请求管道就不会执行
5、可以查看当前所有的module
HttpApplication app = HttpContext.Current.ApplicationInstance;
StringBuilder sb = new StringBuilder();
foreach (string module in app.Modules.AllKeys)
{
sb.AppendLine(module).Append("</br>");
}
Response.Write(sb.ToString());
--------------------------------------httpModule来实现URL路由---------------------------------
使用HttpModule来实现URL路由。这个功能随着Asp.net MVC框架的出现也逐渐流行起来了。
URL路由的目标也是为了使用URL更友好,与URL重写类似。
实现原理:订阅管线的PostResolveRequestCache事件,检查URL是不是期望的路由模式,如果是,则要根据请求中所包含的信息找到一个合适的处理器,并临时保存这个处理器,重写URL到一个Asp.net能映射处理器的地址。在管线的PostMapRequestHandler中,检查前面有没有临时保存的处理器,如果有,则重新给Context.Handler赋值,并重写URL到原始地址。在管线的后续处理中,最终会使用Context.Handler的HttpHandler
-------------------------HttpHandler------------------------------------------------
1、
HttpHandler:处理请求的核心对象 ---请求在第10步被映射到一个HttpHandler
执行处理代码(接受用户数据,连接数据库,生成浏览器代码,然后将结果再次通过HttpModules组成的请求管道返回)
2、
可以自定义HttpHandler,要在web.config中配置
------------------------总结-----------------------
1、每一个请求都将会映射到一个Httphandler,也是处理请求的重要对象
2、HttpModule可以任意订阅这些事件,可以在事件中注册方法
3、两者都要在web.config中注册
4、HttpHandler是每个请求的主要处理对象,而HttpModule可以选择请求交给哪个HttpHandler来处理,甚至,它还可以选择它自己来处理请求。