Http上下文请求

Http上下文请求

2012-09-09 23:08 by xiangxiong, 956 阅读, 1 评论, 收藏编辑

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()); 
} 
复制代码

 

 

 

 
分类: asp.net Ajax
标签: ASP.NET对象
原文地址:https://www.cnblogs.com/Leo_wl/p/2679209.html