HttpContext封装关于单个HTTP请求的全部HTTP特定信息。html
HttpContext基于HttpApplication的处理管道,因为HttpContext对象贯穿整个处理过程,因此,能够从HttpApplication处理管道的前端将状态数据传递到管道的后端,完成状态的传递任务。前端
HttpContext类它对Request、Respose、Server等等都进行了封装,并保证在整个请求周期内均可以随时随地的调用;为继承 IHttpModule 和 IHttpHandler 接口的类提供了对当前 HTTP 请求的 HttpContext 对象的引用。web
当咱们建立一个通常处理程序Handler.ashx时,咱们能够在文件中看到这一句 public void ProcessRequest (HttpContext context);sql
在WebForm中是HttpContext,在MVC中是HttpContextBase,数据库
一、在WebForm或类库(包括MVC)项目中,经过Current静态属性,就可以得到HttpContext的对象。编程
HttpContext context = HttpContext.Current;
二、若是是在Asp.net MVC的Controller中,经过this.HttpContext;就能获取到HttpContextBase对象。后端
HttpContextBase context = this.HttpContext;
三、若是是在MVC视图中能够这样获得:api
@Html.ViewContext.HttpContext
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和Application:用于服务端,整个应用程序、全部用户拥有。
Cache用于在Http请求期间保存页面或者数据, Cache的使用能够大大的提升整个应用程序的效率,它容许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后,服务器不是再次处理而是将Cache中保存的数据直接返回给用户,
能够看出Cache节省的是时间—服务器处理时间。
Cache实例是每个应用程序专有的,其生命周期==该应用程序周期,应用程序重启将从新建立其实例
HttpContext.Cache 是对HttpRuntime.Cache 缓存类的封装,因为封装到了 HttpContext ,局限于只能在 HttpContext 下使用,即只能用于 Web 应用。
综上所属,在能够的条件,尽可能用 HttpRuntime.Cache ,而不是用 HttpContext.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));
Cache.Remove("ID");
例如你存的是一个DataTable对象,调用以下:
DataTable finaltable = Cache["ID"] as DataTable; //或 DataTable finaltable = (DataTable)Cache.Get("ID")
cache通常用于数据较固定,访问较频繁的地方,例如在前端进行分页的时候,初始化把数据放入缓存中,而后每次分页都从缓存中取数据,这样减小了链接数据库的次数,提升了系统的性能。
Request属性为当前 HTTP 请求获取 HttpRequest 对象。
在服务器收到客户端的请求后,HttpRuntime将会建立一个HttpRequest对象的实例,这个实例就是咱们在页面中经常使用的Request。可经过HttpContext.Current或Page对象来访问:
在客户端的请求内容中,主要包含三部份内容。请求行,请求头部,请求主体,在下面的属性中,咱们可一一获取到这些信息。
注意:
Request对象的Browser属性来获取客户端浏览器的一些信息:
Response属性获取当前 HTTP 响应的 HttpResponse 对象。
封装来自 ASP.NET 操做的 HTTP 响应信息。
备注:在代码中,HttpResponse的对象引用由关键字
Response
。 例如,Response.Clear()
是指HttpResponse.Clear方法。 Page类具备名为的属性Response的当前实例。
HttpResponse类的方法和属性经过HttpApplication、 HttpContext、Page、UserControl类的Response的属性进行公开。
在Asp.net WebForm中,Server属性获取提供用于处理 Web 请求的方法的 HttpServerUtility 对象。而在Asp.net MVC中,Server对象是HttpServerUtilityBase对象。
经过Page.Server属性访问,提供用于对Web请求的Help方法。
MachineName: 获取服务器的计算机名称。
ScriptTimeout: 获取和设置请求超时值(以秒计)。
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>")); //通过编码以后 原样输出
在网络状态较好的状况下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服务器上的aspx或非aspx(html)资源。
Server.Transfer方法和Server.Execute方法最灵活!! 但只能转到同一Application目录下,也有可能致使不指望的结果发生。
Server.Execute方法占用资源最多.
Session属性为当前 HTTP 请求获取 HttpSessionState 对象。
Session用来保存每个用户的专有信息。 HttpSessionState类经过HttpContext或Page对象的Session属性访问。一台客户机上多个浏览器窗口访问只有一个Session。
Session的生存期是用户持续请求时间加上一段时间(通常是20分钟左右), Session超时或者被关闭将自动释放数据信息,因为用户中止使用应用程序以后它仍在内存中存留一段时间,所以这种方法效率较低。
Session信息是保存在Web服务器内存中的,保存数据量可大可小。
在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分钟后超时。
//添加: Session["userName"] = "aaa"; //获取: if (Session["userName"] != null) { string str = Session["userName"].ToString(); } //清除某个Session Session["UserName"] = null; Session.Remove("UserName"); //清除所有Session Session.Clear();
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."; }
参考: