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的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net请求管道中的19个事件

asp.net页面生命周期请求管道19个事件

利用HttpApplicaton请求管道防止SQL注入

Asp.Net MVC 的19个管道事件

使用Global.asax的Application_BeginRequest事件过滤客户端XSS恶意脚本提交

asp.net html静态文件没有触发global.asax中的Application_BeginRequest事件的解决方法