HttpContext类Current属性 的运用

1、.Net的HTTP请求

.NET与ASP的运行机制有很大不同.

ASP的请求与响应是,ASP页面被请求,然后逐行解释.是基于过程的.最多是包含了文件,需要先引入文件罢了.

而.Net,在页面被请求后,首先是加载HTTP Module,这不是本文的重点.然后再加载HTTP Handler.这也不是本文的重点.加载的这两项,都需要在Webconfig文件中配置.大家知道的URL转址就是这么实现的.在完成这些之后才开始给出响应的页面.

在给出响应页面的工作中,.Net就表现出和ASP的最大区别来..Net是面向对象的语言,是基于类的语言.没有类很难写出有意义的.Net程序.如果写出来,也就是个ASP的翻版.

2、.NET中基本文件结构(继承关系)
首先大家看到无论在1.1还是2.0中,用VS创建的网站每个ASPx文件都对应一个cs文件(或者vb等其它语言).而cs文件里的类一般和文件同名,如果遇见关键字的情况才会自动使类名前加个'_',例如:_Default.创建的这个cs文件继承自System.Web.UI.Page类,而且只能\必须继承该类.原因就是ASPx文件是继承cs文件的.

就拿Default.ASPx,Default.ASPx.cs文件来说.
Default.ASPx.cs里包含了类 _Default,继承字System.Web.UI.Page
通过

public class _Default : System.Web.UI.Page

    {

        private void Page_Load(object sender, System.EventArgs e)

        {

            // 在此处放置用户代码以初始化页面

        }

    }

}

就能看得出来.
而Default.ASPx文件,虽然没有阐明用的哪个类,但是,实际上已经继承自_Default类.

<%@ Page language="c#" Codebehind="Default.ASPx.cs" AutoEventWireup="false" Inherits="MyTest._Default" %>

DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

    <HEAD>

        <title>Defaulttitle>

        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">

        <meta name="CODE_LANGUAGE" Content="C#">

        <meta name="vs_defaultClientScript" content="JavaScript">

        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

    HEAD>

    <body MS_POSITIONING="GridLayout">

        <form id="Form1" method="post" runat="server">

            <FONT face="宋体">FONT>

        form>

    body>

HTML>

以上代码第一句话最后Inherits="MyTest._Default"就表明了这点.这个文件我是以VS2003建立的,也就是 .Net1.1,MyTest是我用的命名空间。

3、类的运行机制
说了这么多,实际上我们还是没有说到System.Web.HttpContext类。但是我们现在说的东西对于System.Web.HttpContext类运用很有帮助。

我们访问了Default.ASPx,那么是只访问Default.ASPx文件,或者该类么?答案当然不是。.Net中当子类被请求时,会先实例化父类。先建立父类的字段,然后是构造函数。

public class _Default : System.Web.UI.Page

    {

        private void Page_Load(object sender, System.EventArgs e)

        {

            // 在此处放置用户代码以初始化页面

        }

Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码

        override protected void OnInit(EventArgs e)

        {

            //

            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

            //

            InitializeComponent();

            base.OnInit(e);

        }

        

        /**//// 

        /// 设计器支持所需的方法 - 不要使用代码编辑器修改

        /// 此方法的内容。

        /// 

        private void InitializeComponent()

        {    

            this.Load += new System.EventHandler(this.Page_Load);

}

        #endregion

    }

从上面的类中可以看出,该类没有字段,也没有构造函数。实例化它又得先实例化System.Web.UI.Page类。System.Web.UI.Page类不是本文要讨论的。在实例化_Default类的时候首先执行的是OnInit方法。它重写了System.Web.UI.Page.OnInit。然后调用InitializeComponent方法,而InitializeComponent方法又调用了Load事件,执行了Page_Load方法。

在Page_Load方法被执行之前,System.Web.UI.Page类的很多对象是不能使用的,比如:Application,Session等。

4、System.Web.HttpContext类Current属性 的运用
终于说到本文的重点了,可能这部分也不会说很多,但是上面说的确实是为这里服务的。

也不多说了,太长的文章一般没人看,何况我写的比较肤浅,并且不够精彩。在这里就举两个例子。一个是身份验证问题(Session),还有个是全局会话(Application)。

1)、Session
用户登陆后一般要通过Cookice或者Session来控制权限等。但是通过使用一个控件(比如ascx)又觉得不够好。那么,这个时候System.Web.HttpContext.Current就能发挥作用了。

比如,你可以让所有的需要身份验证的页面都继承自MPage类。如下:

using System;

using System.Web;

namespace MyTest

{

    /**//// 

    /// MyTest 的摘要说明。

    /// 

    public class MPage : System.Web.UI.Page

时间: 2024-09-09 04:20:30

HttpContext类Current属性 的运用的相关文章

HTTP请求 HttpContext类用法详解

在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存请求的上下文信息,这个对象就是HttpContext对象.HttpContext粉状了ASP.NET要处理的单次请求的所有信息.在请求处理机制建立时,HttpContext类有HttpRuntime对象实例化,接着该对象会经历请求生存期的各个阶段.如图所示:                            图:封装了请求所有有关信息的HttpContext对象沿HTTP管道传递,直到生成客户端响应 HttpCont

通过属性返回本身,比如HttpContext类

问题描述 就如上面的,静态Current属性返回的是什么,是HttpContext的实例?跟new出来的效果一样嘛?这样做有什么好处,有什么意义,专业术语称这种是什么东西拜托拜托各位大神,小弟自学的,很多东西专业术语也不知叫什么,所以百度起来很困难,拜托拜托 解决方案 解决方案二:没有大神吗解决方案三:Current是静态的属性,所以不要被定义它的位置迷惑了,只是因为需要写在一个类中,而这个类是最合适的位置.解决方案四:引用2楼tcmakebest的回复: Current是静态的属性,所以不要被

httpcontext 类新增函数不能访问的问题

问题描述 httpcontext 类新增函数不能访问的问题 public sealed class HiContext { public static HiContext Current { get { HttpContext current = HttpContext.Current; HiContext item = current.Items["ContextStore"] as HiContext; if (item == null) { if (current == null

iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值

在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property Name相同,然后通过运行时来生成和执行Setter方法给Model类的属性赋值. 通过Runtime来给Model类属性赋值的好处是多多的,它便于代码的后期维护,并且提高了开发效率.当你拿到解析后的字典时你不用一个一个的通过key去把字典的值赋值给相应的Model类的属性,本篇博客中会给出如何去遍历Mod

C#反射技术的简单操作(读取和设置类的属性)

要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法. 首先建立一个测试的类 复制代码 代码如下: public class MyClass { public int one { set; get; } public int two { set; get; } public int five { set; get; } public int three { set; get; } public int four { set; ge

Java 类中类属性和对象属性的初始化顺序

对象 边城狂人 Java 类中类属性 (static 变量) 和对象属性 (非 static 变量) 的初始化顺序可以用如下程序测试: /** * @(#) Test.java * @author fancy */ public class Test { static String a = "string-a"; static String b; String c = "stirng-c"; String d; static { printStatic("

Emit学习-基础篇-为动态类添加属性、构造函数、方法

我们通过一个计算A+B的动态类来演示如何为一个动态类添加属性.构造函数 .方法,以及在方法中使用类中定义的属性,按照惯例,我们先给出要实现的动 态类的C#代码,然后再针对C#代码给出相应的实现,代码如下: Add public class Add { private int _a = 0; public int A { get { return _a; } set { _a = value; } } private int _b = 0; public int B { get { return

b tils utlis-Dbutils做缓存 当实体类的属性为集合时 怎么做呢 众大神有做过的吗

问题描述 Dbutils做缓存 当实体类的属性为集合时 怎么做呢 众大神有做过的吗 Booster这个类以及 做好 但是User包含List 就不会做了 解决方案 http://wallimn.iteye.com/blog/1606930

name- 如何将dr[&amp;amp;quot;Name&amp;amp;quot;].toString();赋值给父实体类定义子实体类对象属性

问题描述 如何将dr["Name"].toString();赋值给父实体类定义子实体类对象属性 解决方案 根据一张不知所谓的图片和绕口令一样的问题描述想得到答案,只有靠你自己了. 解决方案二: 我解决了 自己太任性了仔细想想就应该明白的以后要自己多去思考才会得到收获的.@caozhy