一、HttpContext概述:

HttpContext封装关于单个HTTP请求的所有HTTP特定信息。

HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的前端将状态数据传递到管道的后端,完成状态的传递任务。

HttpContext类它对Request、Respose、Server等等都进行了封装,并保证在整个请求周期内都可以随时随地的调用;为继承 IHttpModule 和 IHttpHandler 接口的类提供了对当前 HTTP 请求的 HttpContext 对象的引用。

当我们创建一个一般处理程序Handler.ashx时,我们可以在文件中看到这一句:public void ProcessRequest (HttpContext context);

1、访问方式

1、在WebForm或类库(包括MVC)项目中,通过Current静态属性,就能够获得HttpContext的对象。

HttpContext context = HttpContext.Current;

2、如果是在Asp.net MVC的Controller中,通过this.HttpContext就能获取到HttpContextBase对象。

HttpContextBase context = this.HttpContext;

3、如果是在MVC视图中可以这样得到:

@Html.ViewContext.HttpContext

2、成员对象:

  1. Application    :为当前 HTTP 请求获取HttpApplicationState 对象
  2. Cache :  获取当前应用程序域的Cache 对象
  3. Request  :  为当前 HTTP 请求获取HttpRequest 对象
  4. Response  :  获取当前 HTTP 响应的HttpResponse 对象
  5. Server   : 获取提供用于处理 Web 请求的方法的HttpServerUtility 对象
  6. Session    :为当前 HTTP 请求获取HttpSessionState 对象
  7. User    :为当前 HTTP 请求获取或设置安全信息。

二、Application属性:保存所有用户共用的信息

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

Application用来保存所有用户共用的信息。

在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在Asp.net开发环境中我们把类似的配置数据放在Web.config中。

HttpApplicationState类可以通过Page.Application访问。

如果要使用Application 要注意的是所有的写操作都要在Application_OnStart事件中完成(global.Asax),尽管可以使用Application.Lock()避免了冲突,但是它串行化了对Application的请求,会产生严重的性能瓶颈。

不要使用Application保存大数据量信息。

global.asax:

void Application_OnStart()
{
Application["UserID"] = "test";
String UserName = Application["UserID"].ToString(); //修改
Application.Lock();
Application["count"] = (Application["UserID"] as int) + 1;
Application.Unlock();
}

三、Cache属性:当前应用程序域服务端缓存对象

Cache属性获取当前应用程序域的 Cache 对象。Cache为服务端缓存对象。

Cache和Application:用于服务端,整个应用程序、所有用户拥有。

Cache用于在Http请求期间保存页面或者数据, Cache的使用可以大大的提高整个应用程序的效率,它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后,服务器不是再次处理而是将Cache中保存的数据直接返回给用户,

可以看出Cache节省的是时间—服务器处理时间。

Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期,应用程序重启将重新创建其实例

HttpContext.Cache 是对底层HttpRuntime.Cache 缓存类的封装,由于封装到了 HttpContext ,局限于只能在 HttpContext 下使用,即只能用于 Web 应用。

所以在可以的条件,尽量用底层的HttpRuntime.Cache ,而不是用HttpContext.Cache 。

cache一般用于数据较固定,访问较频繁的地方,例如在前端进行分页的时候,初始化把数据放入缓存中,然后每次分页都从缓存中取数据,这样减少了连接数据库的次数,提高了系统的性能。

1.创建Cache

Cache.Insert(string key,object value,CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration)

Cache["ID"] = "yiner";
//或者
Cache.Insert("ID", "test");//可以缓存任何对象,比如:DataTable //缓存依赖
CacheDependency cachedep = new CacheDependency(Server.MapPath("~/App_Data/data.xml"));
Cache.Insert("ID", "test", cachedep);//当data.xml更改时,该缓存自动删除 //设置过期时间:后两个参数依次为:过期的绝对时间、过期的相对时间
Cache.Insert("ID", "test", null, DateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration);
Cache.Insert("ID", "test", null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0));

2.销毁Cache

Cache.Remove("ID");

3.调用Cache

例如你存的是一个DataTable对象,调用如下:

DataTable finaltable = Cache["ID"] as DataTable;
//或
DataTable finaltable = (DataTable)Cache.Get("ID")

四、Request属性

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

在服务器收到客户端的请求后,HttpRuntime将会创建一个HttpRequest对象的实例,这个实例就是我们在页面中常用的Request。

Request属性可通过HttpContext.Current或Page对象来访问。

在客户端的请求内容中,主要包含三部分内容。请求行,请求头部,请求主体。

1、HttpRequest 对象的属性

  • Request.Headers:获取 HTTP 头集合:(结果略)
  • Request.RequestType:获取客户端的请求方式,即Get或Post:GET
  • Request.HttpMethod:获取客户端使用的 HTTP 数据传输方法(如 GET、POST 或 HEAD):GET
  • Request.AcceptTypes:获取客户端支持的 MIME 接受类型的字符串数组:*/*
  • Request.RawUrl:获取当前请求的原始URL:/WebForm1.aspx?id=a,RawUrl不包含主机信息和端口号
  • Request.Url:获取有关当前请求的 URL 的信息:http://localhost:10693/WebForm1.aspx?id=a
  • Request.UrlReferrer:获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL:
  • Request.FilePath:获取当前请求的虚拟路径:/WebForm1.aspx
  • Request.CurrentExecutionFilePath:获取当前请求的虚拟路径:/WebForm1.aspx
  • Request.Path:获取当前请求的虚拟路径:/WebForm1.aspx
  • Request.AppRelativeCurrentExecutionFilePath:获取应用程序根的虚拟路径,并通过对应用程序根使用波形符 (~) 表示法(例如,以“~/page.aspx”的形式)使该路径成为相对路径:~/WebForm1.aspx
  • Request.PhysicalPath:获取与请求的 URL 相对应的物理文件系统路径:E:\WebApplication1\WebApplication1\WebForm1.aspx
  • Request.Files:获取客户端发送的 文件的集合:HttpFileCollection对象
  • Request.Form:获取窗体变量集合:HtmlForm控件的Method的默认值post,表单数据以HTTP标头形式发送到Server
  • Request.QueryString:获取 HTTP 查询字符串变量集合:id=a;HtmlForm控件的Method的默认值get,表单数据附在网址后。
  • Request.ServerVariables:获取 Web 服务器变量的集合:Request.ServerVariables["Local_ADDR"] :Server地址 ;Request.ServerVariables["Remote_ADDR"]:客户端地址。
  • Request.Cookies :Cookies 项的集合HttpCookieCollection对象。
  • Request.Params:获取QueryString、Form、ServerVariables和 Cookies 项的组合集合。(结果略)
  • Request.ContentEncoding:获取或设置实体主体的字符集:System.Text.UTF8Encoding
  • Request.ContentLength:指定客户端发送的内容长度(以字节计):0
  • Request.ContentType:获取或设置传入请求的 MIME 内容类型:
  • Request.Browser:获取或设置有关正在请求的客户端的浏览器功能的信息:(见下面详解)
  • Request.UserAgent:获取客户端浏览器的原始用户代理信息:(结果略)
  • Request.UserHostAddress:获取远程客户端的IP主机地址:127.0.0.1
  • Request.UserHostName:获取远程客户端的DNS名称:127.0.0.1
  • Request.UserLanguages:获取客户端语言首选项的排序字符串数组:zh-cn

2、Request.Browser对象的属性

Request对象的Browser属性来获取客户端浏览器的一些信息:

  • Request.Browser.Browser:获取由浏览器在 User-Agent 请求标头中发送的浏览器字符串:IE
  • Request.Browser.MajorVersion:获取浏览器的主(整数)版本号:8
  • Request.Browser.MinorVersion:获取浏览器的次(即小数)版本号:0
  • Request.Browser.ActiveXControls:指示浏览器是否支持 ActiveX 控件:True
  • Request.Browser.Cookies:示浏览器是否支持 Cookie:True
  • Request.Browser.EcmaScriptVersion:获取浏览器支持的 ECMAScript 的版本号:1.2
  • Request.Browser.W3CDomVersion:获取浏览器支持的万维网联合会 (W3C) XML 文档对象模型 (DOM) 的版本:1.0

五、Response属性:HTTP 响应信息

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

封装来自 ASP.NET 操作的 HTTP 响应信息。

在代码中,HttpResponse的对象引用由关键字Response。 例如,Response.Clear()是指HttpResponse.Clear方法。

Page类具有名为的属性Response的当前实例。

HttpResponse类的方法和属性通过HttpApplication、 HttpContext、Page、UserControl类的Response的属性进行公开。

1、属性

  • BufferOutput :   获取或设置一个值,该值指示是否缓冲输出并在处理完整个页之后发送它。
  • Cache :   获取网页的缓存策略(例如:过期时间、保密性设置和变化条款)。
  • Cookies :   获取响应 cookie 集合。
  • Filter  :  获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。
  • Output  :  启用到输出 HTTP 响应流的文本输出。
  • OutputStream  :  启用到输出 HTTP 内容主体的二进制输出。

2、方法

  • AddCacheDependency(CacheDependency[])   :  将一组缓存依赖项与响应关联,这样,如果响应存储在输出缓存中并且指定的依赖项发生变化,就可以使该响应失效。
  • RemoveOutputCacheItem(String)  :  从缓存中移除与默认输出缓存提供程序关联的所有缓存项。 此方法是静态的。
  • AddCacheItemDependencies(String[]) :   使缓存项的有效性依赖于缓存中的另一项。。
  • AddFileDependencies(String[])  :  将文件名数组添加到当前响应依赖的文件名集合中。
  • SetCookie(HttpCookie)  :  更新 Cookie 集合中的一个现有 Cookie。因为 HttpResponse.SetCookie 方法仅供内部使用, 可以改为调用 HttpResponse.Cookies.Set 方法
  • AppendCookie(HttpCookie)  :  将一个 HTTP Cookie 添加到内部 Cookie 集合。
  • AppendHeader(String, String) :   将 HTTP 头添加到输出流。
  • ClearHeaders()  :  清除缓冲区流中的所有头。
  • Redirect(String, Boolean)   : 将客户端重定向到新的 URL。 指定新的 URL 并指定当前页的执行是否应终止。
  • BinaryWrite(Byte[])  :  将二进制字符串写入 HTTP 输出流。
  • Write(String)  :  将一个字符串写入 HTTP 响应输出流。
  • WriteFile(String) :   将指定文件的内容作为文件块直接写入 HTTP 响应输出流。
  • TransmitFile(String)  :  将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。
  • Clear()  :  清除缓冲区流中的所有内容输出。
  • ClearContent()  :  清除缓冲区流中的所有内容输出。
  • Flush()  :  向客户端发送当前所有缓冲的输出。
  • End()  :  将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 EndRequest 事件。
  • Close()   : 关闭到客户端的套接字连接。

六、Server属性

在Asp.net WebForm中,Server属性获取提供用于处理 Web 请求的方法的 HttpServerUtility 对象。而在Asp.net MVC中,Server对象是HttpServerUtilityBase对象。

通过Page.Server属性访问,提供用于对Web请求的Help方法。

1、属性

  • MachineName:  获取服务器的计算机名称。、
  • ScriptTimeout:   获取和设置请求超时值(以秒计)。

2、方法

  • Execute : 在当前请求的上下文中(服务端中)执行指定资源的处理程序,然后将执行返回给调用它的页。
  • Transfer :  终止当前页的执行,并为当前请求开始执行新页。
  • HtmlEncode/HtmlDecode:   对要在浏览器中显示的HTML字符串进行编码。/对已被编码以消除无效 HTML 字符的字符串进行解码
  • UrlEncode/UrlDecode : 编码/解码URL字符串,以便通过 URL 从 Web 上进行可靠的 HTTP 传输。
  • UrlPathEncode: 对 URL 字符串的路径部分进行 URL 编码并返回编码后的字符串。
  • MapPath : 返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径。 该方法经常使用。将虚拟路径转换为服务器物理路径。
context.Response.Write(context.Server.MapPath("/"));    //输出 C:\Users\Administrator\Desktop\WebApplication1\WebApplication1\    //该方法经常用,将虚拟路径转换为物理路径
context.Response.Write("<div style='background-color:red'>HtmlEncode测试</div>"); //如果不编码,默认就是会被浏览器解析的
context.Response.Write(context.Server.HtmlEncode("<div style='background-color:red'>HtmlEncode测试</div>")); //经过编码之后 原样输出

HttpUtility 类由 HttpServerUtility 类在内部使用,HttpUtility 类包含无法从 Server访问的编码和解码实用工具方法,如:ParseQueryString()方法等。

Response.Write("|Url:"+HttpUtility.UrlEncode("你好啊"));

若要对 Web 应用程序之外的值进行编码或解码,请使用 WebUtility 类。

3、Server.Execute、Server.Transfer、Response.Redirect区别

  • Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。
  • Server.Transfer的跳转完全是在服务器端,浏览器根本不知道已经跳转了,因此路径显示的仍然是原路径。
  • Response.Redirect是客户端发送请求到服务器,服务器执行Response.Redirect之后,返回302,浏览器接收到请求后,再次发送一次请求到要跳转的URL.

在网络状态较好的情况下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服务器上的aspx或非aspx(html)资源。

Server.Transfer方法和Server.Execute方法最灵活!! 但只能转到同一Application目录下,也有可能导致不期望的结果发生。

Server.Execute方法占用资源最多.

七、Session属性:每一个用户的专有信息

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

Session用来保存每一个用户的专有信息。 HttpSessionState类通过HttpContext或Page对象的Session属性访问。一台客户机上多个浏览器窗口访问只有一个Session。

Session的生存期是用户持续请求时间加上一段时间(一般是20分钟左右), Session超时或者被关闭将自动释放数据信息,由于用户停止使用应用程序之后它仍在内存中存留一段时间,因此这种方法效率较低。

Session信息是保存在Web服务器内存中的,保存数据量可大可小。

1、配置Session

在Web.config中的 <system.web> </system.web>之间添加

<sessionState
mode="InProc"//InProc:保存到内存,Off;StateServer;SQLServer等
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false" //如果cookieless=true表示不用Cookie,用URL查询字符串传送会话ID。
timeout="20" />

其中timeout是过期时间,如20分钟后超时。

2、操作Session:

//添加:
Session["userName"] = "aaa";
//获取:
if (Session["userName"] != null)
{
string str = Session["userName"].ToString();
} //清除某个Session
Session["UserName"] = null;
Session.Remove("UserName"); //清除全部Session
Session.Clear();

八、User属性

User的属性提供对IPrincipal接口的属性和方法的编程访问。

这个属性能让我们访问各种信息,包括用户是否已验证,用户的类型,用户名等等,我们还可以对该属性的功能进性扩展,以实现我们的要求。
分配给HttpContext.User的对象必须实现IPrincipal接口,而Iprincipal定义的属性之一是Identity,它必须实现Iidentity接口。

if (User.Identity.IsAuthenticated)
{
Page.Title = "Home page for " + User.Identity.Name;
}
else
{
Page.Title = "Home page for guest user.";
}

参考:

https://www.cnblogs.com/DSC1991/p/8674960.html

HttpContext对象下的属性Application、Cache、Request、Response、Server、Session、User的更多相关文章

  1. JSP内置对象--4种属性范围 (pageContext,request,session,application)

    pageContext: javax.servlet.jsp.JspContext抽象类的父类JspContext 中有以下方法. request:javax.servlet.http.的接口Http ...

  2. request response cookie session

    request 1. url传递参数 1)参数没有命名, 如: users/views def weather(request, city, year): print(city) print(year ...

  3. C# 遍历对象下的 属性

    foreach (System.Reflection.PropertyInfo p in users.GetType().GetProperties()) { var xx = p.Name; var ...

  4. asp.net 8 Request,Response,Server

    Request成员: 1.Request.UrlReferrer 获取请求的来源,可以防盗链 Response.Write(Request.Url.ToString());//获取当前请求的URL地址 ...

  5. [原创]java WEB学习笔记15:域对象的属性操作(pageContext,request,session,application) 及 请求的重定向和转发

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. JSP 内置对象(request response session application out pageContext)

    request对象  javax.servlet.http.HttpServletRequest接口的实例 request.setCharacterEncoding("utf-8" ...

  7. JSP最常用的五种内置对象(out,request,response,session,application)

    为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理.开发者在JSP页面中无需声明,无需实例化就可使用.主要有out,request,response,session,applicatio ...

  8. js对象可扩展性和属性的四个特性(下)

    # js对象可扩展性和属性的四个特性(下) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor ...

  9. easyUI中datagrid展示对象下属性以及显示多个子属性(Day_37)

    easyUI中datagrid展示对象下属性以及显示多个子属性 显示对象单个属性值 添加formatter属性 <th field="decidedzone" width=& ...

随机推荐

  1. Kubernetes+Istio

    Kubernetes+Istio   微服务.SpringCloud.k8s.Istio杂谈   一.微服务与SOA “微服务”是一个名词,没有这个名词之前也有“微服务”,一个朗朗上口的名词能让大家产 ...

  2. oracle登录信息对应

    登录数据库填写的是,配置文件中自己定义的值 2. 查询非纯数字值的字段内容 select trim(translate(RTRIM(LTRIM(ITEM_NUMBER)), '#0123456789' ...

  3. 机器学习之挖掘melb_data.csv数据

    mel_data.csv是关于melb地区房屋的数据 mel_data.csv import pandas as pd melbourne_file_path = "E:\data\Melb ...

  4. PAT 1093

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  5. LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42

    540. 有序数组中的单一元素 540. Single Element in a Sorted Array 题目描述 每日一算法2019/6/14Day 42LeetCode540. Single E ...

  6. Centos7下JDK1.8的安装

    1.下载并上传并解压安装包 下载安装包上传到/usr/local目录 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...

  7. 【Tyvj2046】掷骰子

    好水一道题 掷骰子Description Rainbow和Freda通过一次偶然的机会来到了魔界.魔界的大门上赫然写着:小盆友们,欢迎来到魔界~!乃们需要解决这样一个问题才能进入哦lala~有N枚骰子 ...

  8. LeetCode二叉树Java模板

    public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } impor ...

  9. Scala 系列(三)—— 流程控制语句

    一.条件表达式if Scala 中的 if/else 语法结构与 Java 中的一样,唯一不同的是,Scala 中的 if 表达式是有返回值的. object ScalaApp extends App ...

  10. websocket-shap 函数Broadcast的使用方法

    Broadcast:在websocket-shap函数的定义是:向WebSocket服务中的每个客户端发送数据,类似于广播的效果 如果要使用异步发送,可使用BroadcastAsync函数. 在源码中 ...