• 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_pubproperty Application

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

    System_CAPS_pubproperty ApplicationInstance

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

    System_CAPS_pubproperty Cache

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

    System_CAPS_pubpropertySystem_CAPS_static Current

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

    System_CAPS_pubproperty CurrentHandler

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

    System_CAPS_pubproperty CurrentNotification

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

    System_CAPS_pubproperty Error

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

    System_CAPS_pubproperty Handler

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

    System_CAPS_pubproperty IsDebuggingEnabled

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

    System_CAPS_pubproperty IsPostNotification

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

    System_CAPS_pubproperty Items

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

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

    System_CAPS_pubproperty Profile

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

    System_CAPS_pubproperty Request

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

    System_CAPS_pubproperty Response

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

    System_CAPS_pubproperty Server

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

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

    System_CAPS_pubproperty Session

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

    System_CAPS_pubproperty Timestamp

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

    System_CAPS_pubproperty Trace

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

    System_CAPS_pubproperty User

    获取或设置当前 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_pubproperty Application

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

    System_CAPS_pubproperty Context

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

    System_CAPS_protproperty Events

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

    System_CAPS_pubproperty Modules

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

      RegisterModule(type)

    添加一个新模块。

    System_CAPS_pubproperty Request

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

    System_CAPS_pubproperty Response

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

    System_CAPS_pubproperty Server

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

    System_CAPS_pubproperty Session

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

    System_CAPS_pubproperty User

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

    方法

    System_CAPS_pubmethod CompleteRequest()

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

    System_CAPS_pubmethod Dispose()

    处置 HttpApplication 实例。

    System_CAPS_pubmethod Equals(Object^)

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

    System_CAPS_pubmethod GetType()

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

    System_CAPS_pubmethod Init()

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

    System_CAPS_pubmethod ToString()

    返回表示当前对象的字符串。(从 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) 将指定文件的内容写入到输出流中。
  • 相关阅读:
    爬取豆瓣分页照片下载
    css布局:三列布局,中间内容优先加载
    解决在IE下label中IMG图片无法选中radio的几个方法
    CSS架构:最新最佳实践
    JavaScript登陆弹窗,可拖拽
    网站变成灰色的代码
    5个jQuery的备选轻量级移动客户端开发(Mobile development)类库
    jQuery 底部漂浮导航当前位置突出 + 锚点平滑滚动
    Exchange 2007 自定义传输规则
    基于jQuery打造TabPanel
  • 原文地址:https://www.cnblogs.com/CandiceW/p/4958487.html
Copyright © 2020-2023  润新知