基础应用

关注公众号 jb51net

关闭
首页 > 网络编程 > ASP.NET > 基础应用 > ASP.NET中的HttpContext对象

ASP.NET中HttpContext对象下的属性介绍

作者:springsnow

这篇文章介绍了ASP.NET中HttpContext对象下的属性,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、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、成员对象:

二、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 对象的属性

2、Request.Browser对象的属性

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

五、Response属性:HTTP 响应信息

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

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

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

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

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

1、属性

2、方法

六、Server属性

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

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

1、属性

2、方法

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区别

在网络状态较好的情况下,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.";
}

到此这篇关于ASP.NET中HttpContext对象的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文