• 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

  • 相关阅读:
    linux通知链相关
    Android Uevent 分析,从kernel到framework
    Linux下 使用 中断唤醒 已经suspend的 系统
    Android中休眠与唤醒之wake_lock, early_suspend, late_resume
    android电池(四):电池 电量计(MAX17040)驱动分析篇
    android 电池(三):android电池系统
    android 电池(二):android关机充电流程、充电画面显示
    android 电池(一):锂电池基本原理篇
    dev_name和dev_set_name对设备的名字进行操作
    吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Hibernatehbm.xml
  • 原文地址:https://www.cnblogs.com/zhaow/p/8819464.html
Copyright © 2020-2023  润新知