Http上下文请求

作者:互联网   出处:控件中国网   2014-11-05 19:06:03   阅读: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.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()); 
}
 
Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat