HTTP请求管道事件BeginRequest和EndRequest
Posted skybirdzw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP请求管道事件BeginRequest和EndRequest相关的知识,希望对你有一定的参考价值。
这是一个测试示例,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication1 { public class MyHttpModule:IHttpModule { public void Init(HttpApplication context) { context.EndRequest += context_EndRequest; context.BeginRequest += context_BeginRequest; } void context_BeginRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; HttpContext _context = app.Context; _context.Response.Write("<script type=\\"text/javascript\\">alert(\'1\');document.write(\'context_BeginRequest\');</script>"); //_context.Response.End(); //string mimeStr = _context.Response.ContentType; //_context.Response.Write("context_BeginRequest-mime:" + mimeStr); } void context_EndRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; HttpContext _context = app.Context; _context.Response.Write("<script type=\\"text/javascript\\">alert(\'2\');document.write(\'context_EndRequest\')</script>"); //_context.Response.End(); //string mimeStr = _context.Response.ContentType; //_context.Response.Write("context_EndRequest-mime:" + mimeStr); } public void Dispose() { } } }
运行输出:
查看源码:
结论:
BeginRequest是在给客户端输出html内容前调用;EndRequest是在给客户端输出HTML内容后调用;
页面的Page_Load事件是请求进入页面首先执行的,然后才输出HTML内容给客户端;
扩展内容(HttpApplication的处理管道19个事件):
1.BeginRequest:asp.net开始处理请求的第一个事件,表示处理的开始。
2.AuthenticateRequest:验证请求,一般用来取得请求的用户信息。
3.PostAuthenticateRequest:已经获取请求的用户信息。
4.AuthorizeRequest:授权,一般用来检查用户的请求是否获得权限。
5.PostAuthorizeRequest:用户请求已经获得授权。
6.ResolveRequestCache:获取以前处理缓存的处理结果,如果以前缓存过,那么,不用再进行请求的处理工作,直接返回缓存的结果。
7.PostResolveRequestCache:已经完成缓存的处理工作。
8.PostMapRequestHandler:已经根据用户的请求,创建了请求的处理器对象。
9.AcquireRequestState:取得请求的状态,一般用于session
10.PostAcquireRequestState:已经获得了session
11.PreRequestHandlerExecute:准备执行处理程序。
12.PostRequestHandlerExecute:已经执行了处理程序
13.ReleaseRequestState:释放请求的状态。
14.PostReleaseRequestState:已经释放了请求的状态。
15.UpdateRequestCache:更新缓存。
16.PostUpdateRequestCache:已经更新了缓存。
17.LogRequest:请求的日志操作
18.PostLogRequest:已经完成请求的日志操作。
19.EndRequest:本次请求处理完成。
图解:
参考资料:
http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html
https://www.cnblogs.com/wupeiqi/archive/2013/03/05/2944354.html
https://www.cnblogs.com/yuanyuan/archive/2010/11/15/1877709.html
以上是关于HTTP请求管道事件BeginRequest和EndRequest的主要内容,如果未能解决你的问题,请参考以下文章
使用Global.asax的Application_BeginRequest事件过滤客户端XSS恶意脚本提交
asp.net html静态文件没有触发global.asax中的Application_BeginRequest事件的解决方法