当前位置: 代码网 > it编程>编程语言>Asp.net > ASP.NET中HttpContext对象下的属性介绍

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

2024年05月15日 Asp.net 我要评论
一、httpcontext概述:httpcontext封装关于单个http请求的所有http特定信息。httpcontext基于httpapplication的处理管道,由于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:为当前 http 请求获取httpapplicationstate 对象
  • cache:获取当前应用程序域的cache 对象
  • request:为当前 http 请求获取httprequest 对象
  • response:获取当前 http 响应的httpresponse 对象
  • server:获取提供用于处理 web 请求的方法的httpserverutility 对象
  • session:为当前 http 请求获取httpsessionstate 对象
  • 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.";
    }

    到此这篇关于asp.net中httpcontext对象的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持代码网。

    (0)

    相关文章:

    版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

    发表评论

    验证码:
    Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
    站长QQ:2386932994 | 联系邮箱:2386932994@qq.com