标签:
1.先了解一下HttpModule和HttpHandlers。
它们帮助我们在ASP.NET页面处理过程的前后注入自定义的逻辑处理。一个是系统级别(可以改变请求的处理流程)另一个是业务级别的。
如果你想要注入的逻辑是基于像‘.aspx‘,‘.html‘这样的扩展文件,那么你可以使用HttpHandler。在ASP.NET WebForm中,无论是一般处理程序还是WebPage都实现了IHttpHandler接口,而ASP.NET MVC中也有MvcHandler实现了IHttpHandler接口
如果你想要在ASP.NET管道事件中注入逻辑,那么你可以使用HttpModule。举例如ASP.NET默认实现了针对WebForm和MVC的HttpModule,像ASP.NET MVC中默认使用的是UrlRoutingModule。具体实现方式是:通过改写Global文件或自定义一个实现IHttpModule接口的类并在Web.config中进行注册。
2.
一个十分有价值的问题就是在什么事件中我们又可以做些什么?下表就展示了这个问题的答案:
Section | Event | Description |
HttpModule | BeginRequest | 此事件标志着一个新的请求,它保证在每个请求中都会被触发。 |
HttpModule | AuthenticateRequest | 此事件标志ASP.NET运行时准备验证用户。任何身份验证代码都可以在此注入。 |
HttpModule | AuthorizeRequest | 此事件标志ASP.NET运行时准备授权用户。任何授权代码都可以在此注入。 |
HttpModule | ResolveRequest | 在ASP.NET中我们通常使用OutputCache指令做缓存。在这个事件中,ASP.NET运行时确定是否能够从缓存中加载页面,而不是从头开始生成。任何缓存的具体活动可以被注入这里。 |
HttpModule | AcquireRequestState | 此事件标志着ASP.NET运行时准备获得Session会话变量。可以对Session变量做任何你想要做的处理。 |
HttpModule | PreRequestHandlerExecute | 恰好在ASP.NET 开始执行事件处理程序前发生。可以预处理你想做的事。 |
HttpHandler | ProcessRequest | HttpHandler逻辑被执行。在这个部分我们将为每个页面扩展写需要的逻辑。 |
Page | Init | 此事件发生在ASP.NET页面且可以用来: 1、动态地创建控件,如果你一定要在运行时创建控件; 2、任何初始化设置 3、母版页及其设置 在这部分中我们没有获得viewstate、postedvalues及已经初始化的控件。 |
Page | Load | 在这部分ASP.NET控件完全被加载且在这里你可以写UI操作逻辑或任何其他逻辑。NOTE:这个事件也是我们最常见且最常用的一个事件。 |
Page | Validate | 如果在页面上你有验证器,你同样想在这里做一下检查。 |
Page | Render | 是时候将输出发送到浏览器。如果你想对最终的HTML做些修改,你可以在这里输入你的HTML逻辑。 |
Page | Unload | 页面对象从内存中卸载。 |
HttpModule | PostRequestHandlerExecute | 可以注入任何你想要的逻辑,在处理程序执行之后。 |
HttpModule | ReleaseRequestState | 如果你想要保存对某些状态变量的更改,例如:Session变量的值。 |
HttpModule | UpdateRequestCache | 在结束之前,你是否想要更新你的缓存。 |
HttpModule | EndRequest | 这是将输出发送到客户端浏览器之前的最后一个阶段。 |
ASP.Net请求处理机制初步探索之旅 - Part 3 管道
标签:
原文地址:http://www.cnblogs.com/tiantianle/p/5118577.html