ASP.NET 3.5核心编程学习笔记(28):HttpContext类

  在请求执行链的各个阶段中,会有一个对象在各个对象间进行传递,这就是HttpContext对象。HttpContext封装了ASP.NET要处理的单个HTTP请求的所有信息。在请求处理机制建立时,HttpContext类由HttpRuntime对象实例化。接着,该对象会经历请求生存期的各个阶段。如下图所示:

ASP.NET 3.5核心编程学习笔记(28):HttpContext类_第1张图片

HttpContext类的属性

  下表列出了HttpContext类的所有属性。

ASP.NET 3.5核心编程学习笔记(28):HttpContext类_第2张图片

  Current属性是一个十分常用的静态成员,返回当前被处理请求的HttpContext对象。

  Items属性是一个字典对象(更准备地说,它是一个哈希表),使数据可以在某个请求所涉及的模块和处理程序间共享。这些数据的生存期仅限于请求的执行期间。

HttpContext类的方法

ASP.NET 3.5核心编程学习笔记(28):HttpContext类_第3张图片

  从ASP.NET 2.0开始,GetSection方法取代了GetConfig方法,GetWebApplicationSection方法取代了GetAppConfig方法。

URL重写

  RewritePath方法使我们能在运行时更改当前请求的URL,从而执行某种内部的重定向。这样,显示的页面便是通过RewritePath设置的,但显示在浏览器地址栏的地址仍保持不变。URL的更改发生在服务器端,更重要的是在同一次调用的上下文中。RewritePath主要在global.asax中使用,并且应谨慎使用。如果在回发事件上下文中使用该方法,可能会遇到某些视图状态方面的问题。

  
  
protected void Application_BeginRequest( object sender, EventArgs e)
{
HttpContext context
= HttpContext.Current;
object o = context.Request[ " id " ];
if (o != null )
{
int id = ( int )o;
string url = GetPageUrlFromId(id);
context.RewritePath(url);
}
}

protected string GetPageUrlFromId( int id)
{
...
}

  以上代码将某个URL重写为确切页面的地址。

以编程方式加载资源

  如果需要以编程方式生成嵌入资源表达式中的文本,该怎么做?Page和HttpContext类分别提供了一对用于检索嵌在应用程序中资源的方法。

  GetGlobalResourceObject用于检索全局资源,其定义在.resx文件中,且位于特殊文件夹App_GlobalResource下。GetLocalResourceObject针对的也是.resx文件,但位于指定页面的特殊文件夹App_LocalResources下。

  
  
msg1.Text = ( string )HttpContext.GetGlobalResourceObject( " Test " , " MyString " );
msg2.Text
= ( string )HttpContext.GetLocalResourceObject( " /Core35/Samples/Ch02/ResPage.aspx " , " PageResource1.Title " );

  传入GetGlobalResourceObject的第一个参数指定.resx资源文件的名称(不带扩展名),第二个参数是要检索资源的名称。而对于GetLocalResourceObject,第一个参数为页面的虚拟路径,第二个参数为资源的名称。

你可能感兴趣的:(asp.net)