深入解析Asp.NET架构

添加人:yeemio零级(113分)   添加时间:2007-08-31    阅读次数:4176  收藏此教程
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.Web;
  5namespace HttpModuleTest1
  6{
  7    public class Test1Module:IHttpModule
  8    {
  9        public Test1Module()
 10        {
 11        }

 12        public string ModuleName
 13        {
 14            get
 15            {
 16                return "Test1Module";
 17            }

 18        }

 19        public void Init(HttpApplication application)
 20        {
 21            application.BeginRequest += new EventHandler(myBeginRequest);
 22            application.EndRequest += new EventHandler(myEndRequest);
 23            application.PreRequestHandlerExecute += new EventHandler(myPreRequestHandlerExecute);
 24            application.PostRequestHandlerExecute += new EventHandler(myPostRequestHandlerExecute);
 25            application.ReleaseRequestState += new EventHandler(myReleaseRequestState);
 26            application.AcquireRequestState += new EventHandler(myAcquireRequestState);
 27            application.AuthenticateRequest += new EventHandler(myAuthenticateRequest);
 28            application.AuthorizeRequest += new EventHandler(myAuthorizeRequest);
 29            application.ResolveRequestCache += new EventHandler(myResolveRequestCache);
 30            application.PreSendRequestHeaders += new EventHandler(myPreSendRequestHeaders);
 31            application.PreSendRequestContent += new EventHandler(myPreSendRequestContent);
 32        }

 33        private void myBeginRequest(object source, EventArgs e)
 34        {
 35            HttpApplication application = (HttpApplication)source;
 36            HttpContext context = application.Context;
 37            context.Response.Write("Test1Module:Beggining of Request<br>");
 38        }

 39        private void myEndRequest(object source, EventArgs e)
 40        {
 41            HttpApplication application = (HttpApplication)source;
 42            HttpContext context = application.Context;
 43            context.Response.Write("Test1Module:End of Request<br>");
 44        }

 45        private void myPreRequestHandlerExecute(object source, EventArgs e)
 46        {
 47            HttpApplication application = (HttpApplication)source;
 48            HttpContext context = application.Context;
 49            context.Response.Write("Test1Module:Application_RequestHandlerExecute:<br>");
 50        }

 51        private void myPostRequestHandlerExecute(object source, EventArgs e)
 52        {
 53            HttpApplication application = (HttpApplication)source;
 54            HttpContext context = application.Context;
 55            context.Response.Write("Test1Module:Application_PostRequestHandlerExecute:<br>");
 56        }

 57        private void myReleaseRequestState(object source, EventArgs e)
 58        {
 59            HttpApplication application = (HttpApplication)source;
 60            HttpContext context = application.Context;
 61            context.Response.Write("Test1Module:Application_ReleaseRequestState:<br>");
 62        }

 63        private void myAcquireRequestState(object source, EventArgs e)
 64        {
 65            HttpApplication application = (HttpApplication)source;
 66            HttpContext context = application.Context;
 67            context.Response.Write("Test1Module:Application_ReleaseRequestState:<br>");
 68        }

 69        private void myAuthenticateRequest(object source, EventArgs e)
 70        {
 71            HttpApplication application = (HttpApplication)source;
 72            HttpContext context = application.Context;
 73            context.Response.Write("Test1Module:Application_AuthenticateRequest:<br>");
 74        }

 75        private void myAuthorizeRequest(object source, EventArgs e)
 76        {
 77            HttpApplication application = (HttpApplication)source;
 78            HttpContext context = application.Context;
 79            context.Response.Write("Test1Module:Application_AuthorizeRequest:<br>");
 80        }

 81        private void myResolveRequestCache(object source, EventArgs e)
 82        {
 83            HttpApplication application = (HttpApplication)source;
 84            HttpContext context = application.Context;
 85            context.Response.Write("Test1Module:Application_ResolveRequestCache:<br>");
 86        }

 87        private void myPreSendRequestHeaders(object source, EventArgs e)
 88        {
 89            HttpApplication application = (HttpApplication)source;
 90            HttpContext context = application.Context;
 91            context.Response.Write("Test1Module:Application_PreSendRequestHeaders:<br>");
 92        }

 93        private void myPreSendRequestContent(object source, EventArgs e)
 94        {
 95            HttpApplication application = (HttpApplication)source;
 96            HttpContext context = application.Context;
 97            context.Response.Write("Test1Module:Application_PreSendRequestContent:<br>");
 98        }

 99        public void Dispose()
100        {
101        }

102    }

103}

然后在web.config里添加,不明白的看注释部分。

    <httpModules>
      <!--注意我这里的Httplibrary是你添加引用的那个DLL的文件名.Httplibrary.SecurityModules
      中前边部分是你那个类的名称空间,后边的是你建的类的名字。-->
      <add name=" Test1 " type="Httplibrary.SecurityModules,Httplibrary"/>
     <add name=" MultiTest1 " type="HttpModuleTest1.Test1Module, HttpModuleTest1" />
       <add name=" MultiTest2" type="HttpModuleTest2.Test2Module, HttpModuleTest2" />
    </httpModules>

还是用刚才那个测试页面,我们就可以观察到两个test的执行顺序。
我们具体分析一下就是这样的:
HttpRequest开始->进入HttpModule->HttpModule->
首次截获HttpRequest->HttpModule.BeginRequest->
HttpModule.AuthorizeRequest->HttpModule.ResolveRequestCache->
初始化HttpHandler->建立HttpHandler控制点->HttpModule继续处理。HttpHandler已经建立,此后Session可用->HttpModule.AcquireRequestState
->HttpModule.PreRequestHandlerExecute->进入HttpHandler处理HttpRequest
->HttpHandler->HttpHandler.ProcessRequest->返回HttpModule,HttpHandler结束,Session失效->HttpModule.PostRequestHandlerExecute->HttpModule.ReleaseRequestState->
HttpModule.UpdateRequestCache->HttpModule.EndRequest->HttpModule.PreSendRequestHeaders->HttpModule.PreSendRequestContent->
将处理的数据返回客户端,处理结束。

 
3页 第2上一页123下一页
相关的教程: ASP.NET
收藏此教程

当前平均分: 0.0(2 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: