• Http上下文请求


    1.1 Response对象和Request对象

      Request对象是ASP.NET中HTTP通信对象过程中的重要对象。其中Request对象发出HTTP请求,Response对象响应HTTP请求,它们是组成ASP.NET中的HTTP通信过程,不可缺少的一部分。

      获取Response对象的信息并输出

      在ASP.NET中的HTTP通信过程中,HttpResponse对象响应Http请求。其中,为了编程方便,HttpResponse对象通过Response对象进行公开。实际上,Response对象是HttpResponse类的一个实例。HttpResponse对象封装了ASP.NET中的Http请求中的响应信息,并提供对当前页的输出流操作方法。HttpResponse对象能够向网页输出信息,如文本,图片等,并且还为输出的信息提供缓冲区。

      HttpResponse对象不但可以在网页上输出信息,而且可以使用End()方法或中止网页的输出。其包含了许多常用的方法,如   Write(),WriteFile(),Flush(),End(),Close()等

    用反射机制遍历HttpResposne对象的所有成员(包括方法和属性)的信息,如果成员是方法,则在方法的名称之后添加“()”代码如下:

    private void PrintResposneInfo() 
    { 
    // 获取Response实例 
    // HttpResponse response = HttpApplication;
    
    Type t = Response.GetType();
    
    foreach (MemberInfo mi in t.GetMembers()) 
    { 
    // 输出成员信息 
    if(mi.GetType().BaseType.Name == "MethodInfo") 
    { 
    Response.Write("MemberInfo"+mi.Name+"():</br>"); 
    } 
    else 
    { 
    Response.Write("MemberInfo"+mi.Name+"()"); 
    }
    
    Response.Write(" DeclaringType:"+mi.DeclaringType.ToString());
    
    Response.Write(" MemberType:"+mi.MemberType.ToString());
    
    Response.Write(" MetadataToken:"+mi.MetadataToken.ToString());
    
    Response.Write(" ReflectedType:"+mi.ReflectedType.ToString()); 
    } 
    }

    1.2. Http请求上下文

      Http请求上下文(HttpContext对象)是ASP.NET中的重要对象,它包括了ASP.NET在HTTP请求中的大部分对象的信息,如Request,Response,Server,Modules 等对象。HttpContext对象 在ASP.NET应用程序的Http请求的过程各个步骤中保持各个对象之间的联系。HttpContext对象封装了ASP.NET中单个Http请求的所有可用的信息,并在请求处理机制时由HttpRunTime对象实例化。HttpContext对象在ASP.NET的Http请求的过程中与各个对象之间的关系:

    图1-1 HttpContext对象在ASP.NET的Http请求中与各个对象之间关系

    1.3 应用程序的Application实例

      在Asp.net 应用程序中,HttpApplication 实例是唯一的,表示Http请求过程中的整个应用,当应用程序开始运行时,HttpApplication 实例由Asp.Net基本运行库创建,开发过程中不需要显示创建HttpApplication类的实例。如果需要HttpApplication实例,直接获取即可。

     

    // 获取应用程序HttpApplication 实例
    
    HttpApplication thisHttpApp = ApplicationInstance;

      ASP.NET应用程序运行之后,首先创建HttpRuntime对象,然后由HttpApplicationFactory对象创建或选择 HttpApplication对象,然后由HttpApplication处理ASP.NET应用程序请求资源。

      创建一个类(MyHttpModule),该类介绍了使用Http上下文对象(HttpConext)的方法。MyHttpModule类继承于接口IHttpModule(处理Http请求过程中的模块信息的一个接口),首先定义函数Init(HttpApplication httpApp) ,并在该函数中初始化应用程序的HttpApplication实例的AcquireRequestState事件和PostAcquireRequestState事件。其中AcquireRequestState事件和PostAcquireRequestState事件分别使用HttpContext对象和Resposne对象的Write()方法显示事件名称:

    class MyHttpModule:IHttpModule 
    { 
    public void Dispose() 
    { 
    throw new NotImplementedException(); 
    }
    
    public void Init(HttpApplication context) 
    { 
    context.AcquireRequestState += new EventHandler(context_AcquireRequestState); 
    context.PostAcquireRequestState += new EventHandler(context_PostAcquireRequestState); 
    }
    
    void context_PostAcquireRequestState(object sender, EventArgs e) 
    { 
    HttpApplication httpApp = (HttpApplication)sender; 
    HttpContext context = HttpContext.Current; 
    context.Response.Write("context_PostAcquireRequestState"); 
    }
    
    void context_AcquireRequestState(object sender, EventArgs e) 
    { 
    HttpApplication httpApp = (HttpApplication)sender; 
    HttpContext context = HttpContext.Current; 
    context.Response.Write("context_AcquireRequestState"); 
    } 
    }

      新建一个页面,页面加载时首先获取应用程序HttpApplication实例,然后创建MyHttpModule的实例http并调用函数Init(HttpApplication httpApp)进行初始化,随后触发HttpApplication实例的AcquireRequestState和PostAcquireState事件,最后显示HttpApplication实例包含ASP.NET应用程序的重要对象的信息。

    protected void Page_Load(object sender, EventArgs e) 
    { 
    HttpApplication thisHttpApp = new HttpApplication();
    
    MyHttpModule http = new MyHttpModule();
    
    http.Init(thisHttpApp);
    
    // 调用 AcquireRequestState 
    http.context_AcquireRequestState(thisHttpApp,e);
    
    // 调用 PostAcquireRequestState 
    http.context_PostAcquireRequestState(thisHttpApp,e);
    
    Response.Write(thisHttpApp.Application.ToString());
    
    Response.Write(thisHttpApp.Context.ToString());
    
    Response.Write(thisHttpApp.Modules.ToString());
    
    Response.Write(thisHttpApp.Request.ToString());
    
    Response.Write(thisHttpApp.Response.ToString());
    
    Response.Write(thisHttpApp.Server.ToString());
    
    Response.Write(thisHttpApp.Session.ToString()); 
    } 

     

     

     

  • 相关阅读:
    原型模式(Prototype Pattern) 资料合集
    建筑者 & 生成器模式 (Builder Pattern) 资料合集
    CodeProject每日精选: Dialogs and Windows
    CodeProject每日精选: Edit Controls (TextBox, RichTextBox)
    抽象工厂资料汇总
    CodeProject每日精选 Winform Combo and Listboxes
    CodeProject每日精选: Date/Time controls 控件推荐
    Winform按钮推荐 2007.3.8
    hdu 2200
    hdu 1143总结
  • 原文地址:https://www.cnblogs.com/binb/p/zoubin_me.html
Copyright © 2020-2023  润新知