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/zhaow/p/8819464.html

时间: 2024-08-29 08:13:18

HTTP请求管道事件BeginRequest和EndRequest的相关文章

asp.net的请求管道事件

一.引言 上篇介绍了Http的请求过程提到了在请求进入到创建完 HttpApplication 对象后,将进入一系列的处理事件Event,那么这些事件具体都有哪些呢,这篇文章就来简要阐述一下. 二.正文 既然请求最后交给了 HttpApplication 处理,那么通过获取该对象,我们就可以通过反射来获取到该对象当中所有的事件,先看下具体的代码. public ViewResult GetEvents() { HttpApplication application = HttpContext.A

请求管道与19个标准事件

1.BeginRequest ASP.NET开始处理对的第一个事件,表示处理的开始. 2.AuthenticateRequest 验证请求,一般用来去请求的用户信息 3.PostAuthenticateRequest 已经获取请求的用户信息 4.AuthorizeRequest 授权,一般用来检查用户的请求是否获取权限 5.PostAuthorizeRequest 用户请求已经得到授权 7.PostResolveRequestCache 已经完成缓存的获取工作 8.PostMappRequest

如何使用请求管道中事件实现自定义方法

1.新建类xx.cs:IHttpModule,继承该接口,实现接口方法 public class ValidateSessionHttpModule : IHttpModule { public void Dispose() { throw new NotImplementedException(); } /// <summary> /// 完成请求管道中事件的注册 /// </summary> /// <param name="context">&

页面请求管道和19个标准事件

页面请求管道和19个标准事件 图片来自网络

ASP.NET 管道事件与HttpModule, HttpHandler简单理解 -摘自网络

第一部分:转载自Artech  IIS与ASP.NET管道 ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载).IIS 6引入了应用程序池的概念,一个工作进程对应着一个应用程序池.一个应用程序池可以承载一个或者多个Web应用,每个Web应用映射到一个IIS虚拟目录.与IIS 5.x一样,每一个Web应用运行在各自的应用程序域中. 如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一

从请求管道深入剖析HttpModule的实现机制,有图有真相

想要了解底层的原理必须对请求处理过程和页面的生命周期有点了解才方便您入门学习一下内容: 关于请求处理过程和页面的生命周期将会在接下来的日子为大家做一个深入的讲解. HttpModule的实现机制如下: 1.请求到达ISAPIRuntime 的时候通过ProcessReqeust(下文统称pr ) 方法创建 HttpWrokRequest 对象. 2.在执行ISAPIRuntime 的pr 方法时候,方法内部的HttpRuntime 的pr 方法根据HttpWorkRequest 对象创建了上下文

Asp.Net MVC 的19个管道事件

httpApplication调用ProcessRequest方法,内部执行19个管道事件,如下 BeginRequest  开始处理请求 AuthenticateRequest 授权验证请求开始,获取用户授权信息 PostAuthenticateRequest 获取成功 AunthorizeRequest 授权,一般用来检查用户是否获得权限 PostAuthorizeRequest  获得授权 ResolveRequestCache 获取页面缓存结果(如果没有则执行) PostResolveR

ASP.NET请求管道、应用程序生命周期、整体运行机制

我们知道在ASP.NET中,若要对ASP.NET应用程序进行 初始化并使它处理请求,必须执行一些处理步骤,熟悉应用程序生命周期非常重要,这样才能在适当的生命周期阶段编写代码,达到预期的效果.永远不要做只会拖 控件的.NET程序员,Never!那么你就必须懂ASP.NET应用程序生命周期,懂ASP.NET页面生命周期,懂ASP.NET 服务器控件原理.接下来,我们一起来看看 可以先看一下先导篇 [深入ASP.NET原理系列]--ASP.NET请求管道对Asp.Net WebForm和Asp.Net

ASP.NET 生命周期及管道事件

Client(发送报文:请求行+请求头+空行+请求体) <------ Http 协议 ------> Server,由 Http.sys 监听 Http 请求 -> WAS+Metabase(通过URL确定WebApp工作进程) -> W3WP.exe(一个应用程序池,加载Aspnet_IsAPI.dll) ->AppDomainFactory(构造 ApplicationManager)->ISAPIApplicationHost+ISAPIRuntime(由App