码迷,mamicode.com
首页 > Web开发 > 详细

HTTP请求管道事件BeginRequest和EndRequest

时间:2018-04-13 13:26:16      阅读:2207      评论:0      收藏:0      [点我收藏+]

标签:resolve   运行   查看   stat   arch   www   log   send   代码   

这是一个测试示例,代码如下:

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

HTTP请求管道事件BeginRequest和EndRequest

标签:resolve   运行   查看   stat   arch   www   log   send   代码   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!