13.4 上下文对象

有关应用程序状态的详情、处理的请求以及构建的响应信息全部通过上下文对象来获取。下面将介绍用于提供上下文的类:HttpContext、 HttpApplication,HttpRequest,HttpResponse类,所有这些类均位于System.Web。

13.4.1 HttpContext

 Encapsulates all HTTP-specific information about an individual HTTP request. HttpContext。用于从头到尾跟踪请求的状态,它也是有关请求的所有可用信息(包括HttpRequest和HttpResponse对象)的通道。还会定义可用于管理请求生命周期的方法和属性。

名称说明
System_CAPS_pubpropertyApplication

为当前 HTTP 请求获取 HttpApplicationState 对象。

System_CAPS_pubpropertyApplicationInstance

为当前 HTTP 请求获取或设置 HttpApplication 对象。

System_CAPS_pubpropertyCache

获取当前应用程序域的 Cache 对象。

System_CAPS_pubpropertySystem_CAPS_staticCurrent

为当前 HTTP 请求获取或设置 HttpContext 对象。

System_CAPS_pubpropertyCurrentHandler

获取表示当前正在执行的处理程序的 IHttpHandler 对象。

System_CAPS_pubpropertyCurrentNotification

获取一个 RequestNotification 值,该值指示当前正在处理的 HttpApplication 事件。

System_CAPS_pubpropertyError

获取在处理 HTTP 请求的过程中累积的第一个错误(如果有)。

System_CAPS_pubpropertyHandler

获取或设置负责处理 HTTP 请求的 IHttpHandler 对象。

System_CAPS_pubpropertyIsDebuggingEnabled

获取一个值,该值指示当前 HTTP 请求是否处于调试模式。如果已将调试器附加到web窗体应用程序,则返回true。

System_CAPS_pubpropertyIsPostNotification

在 HttpApplication 事件完成处理之后获取 ASP.NET 管道的当前进程点的值。

System_CAPS_pubpropertyItems

获取可用于在 HTTP 请求过程中在 IHttpModule 接口和 IHttpHandler 接口之间组织和共享数据的键/值集合。返回可用于

在参与处理请求的ASP.NET Framework组件之间传递状态数据的集合。

System_CAPS_pubpropertyProfile

获取当前用户配置文件的 ProfileBase 对象。

System_CAPS_pubpropertyRequest

为当前 HTTP 请求获取 HttpRequest 对象。

System_CAPS_pubpropertyResponse

获取当前 HTTP 响应的 HttpResponse 对象。

System_CAPS_pubpropertyServer

获取提供用于处理 Web 请求的方法的 HttpServerUtility 对象。其中包含实用功能,最有用的功能包括:用于对字符串

进行安全编码以将其作为HTML显示的方法,以及用于控制请求处理程序执行的功能。

System_CAPS_pubpropertySession

为当前 HTTP 请求获取 HttpSessionState 对象。

System_CAPS_pubpropertyTimestamp

获取当前 HTTP 请求的初始时间戳。

System_CAPS_pubpropertyTrace

获取当前 HTTP 响应的 TraceContext 对象。

System_CAPS_pubpropertyUser

获取或设置当前 HTTP 请求的安全信息。

13.4.2 HttpApplication

          在ASP.NET Framework 中用到的许多基类都提供了一些便捷属性,这些属性与那些由HttpContext类定义的属性对应。Defines the methods, properties, and events that are common to all application objects in an ASP.NET application.

 

属性

 名称说明
System_CAPS_pubpropertyApplication

获取应用程序的当前状态。

System_CAPS_pubpropertyContext

获取关于当前请求的 HTTP 特定信息。

System_CAPS_protpropertyEvents

获取处理所有应用程序事件的事件处理程序委托列表。

System_CAPS_pubpropertyModules

获取当前应用程序的模块集合。

 RegisterModule(type)

添加一个新模块。

System_CAPS_pubpropertyRequest

获取当前请求所对应的内部请求对象。

System_CAPS_pubpropertyResponse

获取当前请求所对应的内部响应对象。

System_CAPS_pubpropertyServer

获取当前请求所对应的内部服务器对象。

System_CAPS_pubpropertySession

获取提供对会话数据的访问的内部会话对象。

System_CAPS_pubpropertyUser

获取当前请求的内部用户对象。

方法

System_CAPS_pubmethodCompleteRequest()

使 ASP.NET 跳过 HTTP 执行管线链中的所有事件和筛选并直接执行EndRequest 事件。

System_CAPS_pubmethodDispose()

处置 HttpApplication 实例。

System_CAPS_pubmethodEquals(Object^)

确定指定的对象是否等于当前对象。(从 Object 继承。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type。(从 Object 继承。)

System_CAPS_pubmethodInit()

在添加所有事件处理程序模块之后执行自定义初始化代码。

System_CAPS_pubmethodToString()

返回表示当前对象的字符串。(从 Object 继承。)


这其中的多数成员都是HttpContext类对应的便捷属性。接下来介绍一些要注意的要点。

1.处理属性异常

     Request,Response、Session、User属性全部返回HttpContext类中对应属性的值,缺点是:如果他们从HttpContext中获得的值为null,所有这些属性将抛出HttpException。

        //使用HttpContext属性来确定当前应用程序事件。
        public Global()
        {
            BeginRequest += HandleEvent;
            EndRequest += HandleEvent;
            AcquireRequestState += HandleEvent;
            PostAcquireRequestState += HandleEvent;
        }

        protected void HandleEvent(object sender, EventArgs e)
        {
            string eventName = "<Unknown>";
            switch (Context.CurrentNotification)
            {
                case RequestNotification.BeginRequest:
                case RequestNotification.EndRequest:
                    eventName = Context.CurrentNotification.ToString();
                    break;
                case RequestNotification.AcquireRequestState:
                    if (Context.IsPostNotification)
                    {
                        eventName = "PostAcquireRequestState";

                    }
                    else
                    {
                        eventName = "AcquireRequestState";
                    }
                    break;

            }
            EventCollection.Add(EventSource.Application, eventName);

        }
        protected void Application_Start(object sender, EventArgs e)
        {
            EventCollection.Add(EventSource.Application, "Start");
            Application["message"] = "Application Events";
            CreateTimeStamp();
        }
protected void CreateTimeStamp()
        {
            string stamp = Context.Timestamp.ToLongTimeString();
            if ( Session != null)
            {
                Session["request_timestamp"] = stamp;
            }
            else
            {
                Application["app_timestamp"] = stamp;
            }
        }

 

 

 

将会报错

更新CreateTimeStamp方法以使用HttpContext属性

protected void CreateTimeStamp()
        {
            string stamp = Context.Timestamp.ToLongTimeString();
            if (Context.Session != null)
            {
                Session["request_timestamp"] = stamp;
            }
            else
            {
                Application["app_timestamp"] = stamp;
            }
        }

2完成请求

      HttpApplication.CompleteRequest方法可用于废弃请求生命周期的正常流程。直接跳到LogRequest事件。如果要实现一个自定义错误处理程序模块,或者如果代码能够满足其自身的需求,而不需要其他模块或处理程序的帮助,那么可以使用此方法。

14.4.3 HttpRequest

HttpRequest对象用于描述所处理的HTTP请求。(使 ASP.NET 能够读取客户端在 Web 请求期间发送的 HTTP 值。)下表列出了提供有关请求的信息的属性。

HttpRequest的作用是令到Asp.net能够读取客户端发送HTTP值。比如表单、URL、Cookie传递过来的参数。

  返回字符串的那些值就不说了,那些基本上都是与HTTP请求报文相关的东西。

   现在看看返回NameValueCollection对象的东东,这个对象只是为了存储返回的东西。

  1、Request.Headers;

  这个东西返回的是什么呢?写个实例:

       public ActionResult Index()
        {
            HttpRequest request = System.Web.HttpContext.Current.Request;
            NameValueCollection headersCollect = request.Headers;
            string[] headArr = headersCollect.AllKeys;
            foreach (string str in headArr)
            {
                Response.Write(str + ":" + headersCollect.Get(str) + ";<br/>");
            }
            return View();
        }

 看看在浏览器输出:

  再用火狐看看HTTP请求报文的请求头信息:

   明显可以看到,这个request.Headers返回的就是请求头信息的一个NameValueCollection集合。

   2、Request.Form

  这个属性获取的是浏览器提交的表单内容,也是返回NameValueCollection对象,这个对象中包含了所有的表单键值对内容。

  看前台HTML代码:

<form action="/Home/GetForm" method="post">
    <p>姓名:<input type="text" name="Name" /></p>  //输入张三
    <p>年龄:<input type="text" name="Age" /></p>   //输入12
    <p>性别:<input type="radio" name="male" value="man" />男 &nbsp; <input type="radio" name="male" value="woman" />女</p>  //选择 男
    <p><input type="submit" value="提交" /></p>
</form>

后台代码:

  public ActionResult GetForm()
        {
            HttpRequest request = System.Web.HttpContext.Current.Request;
            NameValueCollection FormCollect =  request.Form;
            foreach (string str in FormCollect)
            {
                Response.Write(str + ": " + FormCollect.Get(str) + "<br/>");
            }
            return Content("键值对数目:" + FormCollect.Count);
        }

 

浏览器输出:

Name: 张三
Age: 12
male: man
键值对数目:3

 3、Request.QueryString

  该属性的作用是将URL中的参数全部保存到NameValueCollection集合中

 public ActionResult TestCookie()
        {
            NameValueCollection nvc = new NameValueCollection();
            nvc = System.Web.HttpContext.Current.Request.QueryString;
            Response.Write(nvc.Count + "   ");  //输出路径中参数集合的总数
            if (nvc.Count > 0)
            {
                foreach (string str in nvc.AllKeys)
                {
                    Response.Write(str + ": " + nvc.Get(str) + ";  ");      //遍历url参数集合,输出参数名与值
                }
            }
            return View();
            //当路径为http://localhost:22133/Home/testCookie?id=1&name=张三&Age=23
            //输出3 id: 1; name: 张三; Age: 28;      

4、Params,Item与QueryString、Forms的区别

  • Get请求用QueryString;
  • Post请求用Forms;
  • Parms与Item可以不区分Get请求还是Post请求;

  Params与Item两个属性唯一不同的是:Item是依次访问这4个集合,找到就返回结果,而Params是在访问时,先将4个集合的数据合并到一个新集合(集合不存在时创建), 然后再查找指定的结果。

 13.4.4 HttpResponse

      HttpResponse对象代表所构建的响应,并提供了用于自定义响应的方法和属性。那些与响应基本结构相关的成员,这些成员如表:

    

HttpResponse
属性说明
AppendCookie(cookie)用于将cookie添加到集合中的便捷方法。
AppendHeader(name,val)用于在响应中添加新头部的便捷方法。
BufferOutput获取或设置一个值,表明是否应在将请求发送给浏览器之前完全缓冲请求。默认值为true。如果将此值更改为false,随后的模块和处理程序将无法更改响应。
Cache返回为响应指定缓存策略的HttpCachePolicy对象。
CacheControl获取或设置响应的cache-control HTTP标头。
Charset获取或设置为响应指定的字符。
Clear()ClearContent()这些方法是等价的,他们用于从响应中删除内容。
ContentEncoding获取或设置响应中内容的编码。
Cookies获取响应的cookie集合。
Headers返回响应头的集合。
IsRequestBeingDirected如果客户端仍连接到服务器。
Output返回可用于向响应中写入文本的TextWriter。
OutputStream返回可用于响应中写入二进制的数据Stream
RedirectLocation获取或设置HTTP Location头的值。
Status获取或设置响应的状态。
StatusCode获取或设置状态的数字部分
StatusDescription获取或设置状态的文本部分
SuppressContent如果设置为true,会避免将响应内容发送给客户端。
Write(data)将数据写入到响应输出流中。
WriteFile(path)将指定文件的内容写入到输出流中。

 

转载于:https://www.cnblogs.com/CandiceW/p/4958487.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值