zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Leetcode 257. 二叉树的所有路径
    Leetcode 1306. 跳跃游戏 III
    Leetcode 编程中好用的一些C++用法
    Leetcode 96. 不同的二叉搜索树
    Leetcode 892. 三维形体的表面积
    Leetcode 219. 存在重复元素 II
    Leetcode 5281. 使结果不超过阈值的最小除数
    springboot多租户设计
    MAC电脑修改Terminal以及vim高亮显示
    基于springboot搭建的web系统架构
  • 原文地址:https://www.cnblogs.com/zhaow/p/8819464.html
Copyright © 2011-2022 走看看