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

原文地址:https://www.cnblogs.com/zhaow/p/8819464.html