ASP.NET的内置对象
一、Response对象
Response对象是HttpResponse类的一个实例。该类主要是封装来自ASP.NET操作的HTTP响应信息。
1.Response对象的属性
(1)ContentType属性。ContentType属性指定响应的HTTP内容类型。如果未指定ContentType,其默认值为text/HTML。
(2)Charset属性。Charset属性将字符集名称附加到Response对象中的content-type头信息的后面。对于不包含Response.Charset属性的
ASP.NET页,content-type头信息将为content-type:text/html。可以在asp文件中指定content-type头信息,如:
Response.Charset="gb2312";
将产生以下结果:
content-type:text/html; charset=gb2312
无论字符串表示的字符集是否有效,该功能都会将其插入content-type头信息中。且如果某个页包含多个含有Response.Charset的标记,则
每个Response.Charset都将替代前一个CharsetName。这样,字符集将被设置为该页中Response.Charset的最后一个实例所指定的值。
(3)Expires属性。Expires属性指定了在浏览器上缓冲存储的页距过期还有多少时间。如果用户在某个页面过期之前又回到此页,就会显示
缓冲区中的版本。如设置response.expires=0,则可使缓存的页面立即过期。这是一个较实用的属性,当客户通过ASP.NET的登录页面进入Web站
点后,应该利用该属性使登录页面立即过期,以确保安全。
(4)ExpiresAbsolute属性。与Expires属性不同,ExpiresAbsolute属性指定缓存在浏览器中,页面的确切到期日期和时间。在未到期之前
,若用户返回到该页,该缓存中的页面就显示。如果未指定时间,该主页在当天午夜到期。如果未指定日期,则该主页在脚本运行当天的指定
时间到期。
2.Response对象的方法
Response对象可以输出信息到客户端,包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置cookie的值。
1.Write方法
ASP.NET中引用对象方法的语法是“对象名.方法名”,如下面脚本中用的Response.Write(i+"<BR>")语句,其含义为引用Response对象的
Write方法在屏幕上显示从1-500。每一句命令执行后结果都立即显示,可实时地看到执行结果。
for(int i=1;i<=500;i++)
{
Response.Write(i+"<BR>");
}
Response对象的Write方法将指定的字符串或表达式的结果写到当前的HTTP输出。方法就是嵌入到对象定义中的程序代码,它定义对象怎样去
处理信息。使用嵌入的方法,对象便知道如何去执行任务,而不用提供额外的指令。
2.BufferOutput相关方法
在某些场合下,可以利用缓冲区来延续执行过程,当利用缓冲区时,直到整个页面执行结束才会将结果输出到浏览器上。Buffer方法已被否
决,而代之以BufferOutput方法,提供它只是为了与以前的ASP版本兼容。在ASP.NET中使用BufferOutput。如果缓冲了到客户端的输出,则为
true;否则为false。默认为true。
下面的示例只在缓冲了输出时才执行操作。
if(Response.BufferOutput == true)
{
//....
}
3.End方法、Clear方法和Flush方法
Response对象还有End方法和Clear方法。End方法会立即停止页面的执行并得到相应结果。在执行End方法时,不需要考虑是否进行了缓存输
出。另外,End方法在调试程序时,非常有用。它可以输出一部分内容,来帮助判断程序是在何处中止或出错的。
Clear方法是用来在不将缓存中的内容输出的前提下,清空当前页的缓存,仅当使用了缓存输出时,才可以利用Clear方法。
Response对象在缓存输出中,还有另一个方法是Flush,该方法可以将缓存中的内容立即显示出来。该方法有一点和Clear方法一样,它在脚
本前面没有将Buffer属性设置为True时会出错。和End方法不同的是,该方法调用后,该页面可继续执行。
4.Redirect方法
对象Response的另一个常用的方法是Redirect方法。在很多场合下,网站需要引导用户到另一个主页上,例如,用户注册单没有填写完全或
填写错误就进行了提交,那么提交程序会自动将用户返回到注册页等。Redirect方法使浏览器立即重定向到程序指定的URL。这也是一个开发时
经常用到的方法,这样程序员就可以根据客户的不同响应,为不同的客户指定不同的页面或根据不同的情况指定不同的页面。一旦使用了
Redirect方法,任何在页中显式设置的响应正文内容都将被忽略。然而,此方法不向客户端发送该页设置的其他HTTP头信息,而是产生一个将
重定向URL作为链接的自动响应正文。
可以利用Response.Redirect方法来指向任何合法的网址,该网址可以是HTML页面或aspx页面等,可以处于当前服务器,也可以处于局域网甚
至广域网上的任何一台自带操作系统和HTTPServer的服务器。
不过,现在这种操作并不顺利,老版本的浏览器通常无法处理,而是会显示如下信息:
Object Moved
This object may be found here
用鼠标单击here后,转到相应页面。
这样给用户的体验就不是很好。所以也可以把要转到的页面包含进当前文件。利用服务端的INCLUDE命令可以很容易地在ASP.NET中包含其他
文件。这种服务端的INCLUDE命令不需要在脚本中实现,它完全可以作为HTML代码的一部分,例如:
<HTML>
<HEAD><TITLE>欢迎</TITLE></HEAD>
<BODY>
<!--#INCLUDE VIRTUAL="mybanner.inc"-->
欢迎进入文件包容示例程序
</BODY>
</HTML>
在这个例子中。文件mybanner.inc将被插入到这个ASP.NET文件<BODY>标记下面,当这个ASP.NET文件执行时,在mybanner.inc中的HTML代码
以及脚本也将在相应位置执行或出现。这种文件包含有两种路径,虚拟路径或者物理路径。下面是包含物理路径的示例:
<HTML>
<HEAD><TITLE>欢迎</TITLE></HEAD>
<!--#INCLUDE FILE="mybanner.inc"-->
欢迎进入文件包容示例程序
</BODY>
</HTML>
如果使用FILE命令来指定物理路径,那么文件必须在当前目录或者子目录下面。本例中,文件在当前目录下,这样限制就比较多,因此,一
般应当使用虚拟路径命令。
这种文件对于任何其他扩展名都是有效的,一般来说,习惯上用.INC扩展名,但是还可以使用aspx,htm,html或者任何其它扩展名。有两种
情况需要包含其他文件,一种是有一些十分通用的常用程序段或者脚本,不需要每个ASP.NET文件都写一遍,那么完全可以在每个需要的
ASP.NET文件中进行包含就行了。
二、Request对象
Request对象是HttpRequest类的一个实例。使ASP.NET能够读取客户端在Web请求期间发送的HTTP值。
1.Request对象的属性
(1)TotalBytes属性
得到客户端在请求正文中发送的总字节数。该属性为只读。
语法:Counter=Request.TotalBytes;
(2)Counter属性
指定一个变量来接收客户端在请求中发送的总字节数。
2.Request对象的方法
(1)Form方法和QueryString方法
当需要在多个ASP.NET主页中传递消息的时候,Request的Form方法是一个可以选择的方法。它通过使用POST方法的表格检索传送到HTTP请求
正文中表格元素的值。
Form集合按请求正文中参数的名称来索引。Request.Form(element)的值是请求正文中element值。
在Request对象中,还有一个集合实现类似的功能,它就是QueryString。大家经常可以看见类似这样的网络地址:
“http://www.ECNU.com/query.asp?stockCode=06601”
问号(?)后面的值就是HTTP查询字符串,而QueryString集合检索HTTP查询字符串中变量的值。通过发送表格数据或由用户在其游览器的地
址框中输入查询都可以生成类似的查询字符串。它和Form集合的区别是用QueryString集合检索HTTP查询字符串中变量的值时,变量和它的值是
可见的。也就是说,任何一个路过的人都可以看见由QueryString集合接收的任何变量的值,这就意味着如果用它来传递用户密码是很危险的。
如果传递的数据量比较大,用Query字段也不好办。对于不同的浏览器,这种信息传递的大小是有不同的限制的,例如某些浏览器无法处理超
过2000个字符的Query字段。如果URL连接带Query字段超过这个长度,浏览器就无法正确处理。有时无法确认字段长度具体有多少,因为实际上
对于浏览器限制的长度是指浏览器地址栏中所能显示并发送的最大长度,也就是URL地址和Query字段的总长度。一般说来,如果传递数据量比
较大,就不要使用这种方式了。所以,利用Query字段传递的信息都应当是简洁的和非保密的,如果有大量数据需要传递,那么可以利用HTTP的
Form中的hidden类型,详细介绍请参考有关HTML的介绍。在这里值得解释的是,HTTP协议在传递Form时比传递Query字段有效得多。
(2)BinaryRead方法
Request对象包括BinaryRead方法,该方法获取作为POST请求的一部分而从客户端传送到服务器的数据。
语法:variant=Request.BinaryRead(Count)
参数:
·variant:包含由该方法返回的无符号数的数组。该参数的类型为byte。
·count:在执行前,指定要从客户端读取的字节数。此方法返回后,count将包含从客户机成功读取的字节数。实际读取的字节总数将小于
或等于Request.TotalBytes。
BinaryRead方法用于读取作为POST请求的一部分从客户端发出的未加工的数据。此方法用于在底层访问数据。与此相反,Request.Form集合
用于查看在公告请求中发送的表格数据。一旦调用了BinaryRead,则引用Request.Form集合中的任何变量都将导致错误发生。反之,一旦引用
了Request.Form集合中的一个变量,则调用BinaryWrite也将导致错误发生。请记住,如果在访问Request集合中的变量时未指定该变量属于哪
一个子集,将搜索Request.Form集合并强制使用上述规则。
三、Application对象
Application对象是HttpApplicationState类的一个实例。
HttpApplicationState类的单个实例在客户端第一次从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。对于Web服务器上的
每个ASP.NET应用程序都要创建一个单独的实例。然后通过内部Application对象公开对每个实例的引用。
·数据可以在Application对象内部共享,因此一个Application对象可以覆盖多个用户。
·一个Application对象包含事件可以触发某些Application对象脚本。
·个别的Application对象可以用Internet Service Manager来设置而获得不同属性。
·单独的Application对象可以隔离出来在它们自己的内存中运行,这就是说,如果一个人的Application遭到破坏,不会影响其他人。
·可以停止一个Application对象(将其所有组件从内存中驱除)而不会影响到其他应用程序。
一个网站可以有不止一个Application对象。典型情况下,可以针对个别任务的一些文件创建个别的Application对象。例如,可以创建一个
Application对象来适用于全部公用用户,而再创建另外一个Application对象只适用于网络管理员。
Application对象使给定应用程序的所有用户之间共享信息,并且在服务器运行期间持久地保存数据。因为多个用户可以共享一个
Application对象,所以必须要有Lock和Unlock方法以确保多个用户无法同时改变某一属性。
1.Application对象的集合
(1)Contents集合。下面的示例创建一个新的HttpApplicationState对象,此对象用于访问应用程序状态集合中的对象名。
HttpApplicationState AppState2;
AppState2 = Application.Contents;
String[] StateVars = new String[AppState2.Count];
StateVars = AppState2.Allkeys;
(2)StaticObjects集合。StaticObject集合包含所有的在Application对象范围中使用<OBJECT>标记创立的对象。可以使用该集合确定某对
象指定属性的值或遍历集合,以及检索所有静态对象的所有属性。
语法如下:
public HttpStaticObjectCollection StaticObjects {get;}
使用循环控制结构可以遍历StaticObjects集合中的关键字。请看下面的示例。
HttpStaticObjectsCollection pageObjects;
pageObjects = Application.StaticObjects;
if (PageObjects.Count > 0)
{
//...
}
2.Application对象的方法
(1)Lock方法。Lock方法可以阻止其他客户修改存储在Application对象中的变量,以确保在同一时刻仅有一个客户可以修改和存取
Application变量。如果用户没有明确调用Unlock方法,则服务器将在页面文件结束或超时即解除对Application对象的锁定。
语法:Public void Lock();
(2)Unlock方法。Unlock方法可以使其他客户端在使用Lock方法锁住Application对象后,修改存储在该对象中的变量。如果未显示调用该
方法,Web服务器将在页面文件结束或超时后解锁Application对象。
语法:public void UnLock();
下面的示例使用Lock方法和Unlock方法,在本地会话更改两个应用程序变量值之前防止其他会话更改他们。
Application.Lock();
Application["MyCode"] = 21;
Application["MyCount"] = Convert.ToInt32(Application["MyCount"]) + 1;
Application.UnLock();
3.Application对象的事件
(1)Application_OnEnd事件。Application_OnEnd事件在应用程序退出时于Session_OnEnd事件之后发生,只有Applicaiton和Server内嵌对
象可用。
(2)Application_OnStart事件。Application_OnStart事件在首次创建新的会话(即Session_OnStart事件)之前发生,只有Application和
Server内嵌对象是可用的。在Application_OnStart事件脚本中引用Session,Request或Response对象将导致错误。
一个Application对象的OnStart事件肯定发生在Session_Start事件之前。不过,Application对象不会像Session对象那样在一个新用户请求
后就触发,Application对象只触发一次,即第一个用户的第一次请求。
Application_OnEnd事件只有在服务中止或该Application对象卸载时才会触发,例如,在Internet Service Manager中关闭了网络服务,那
么Application_OnEnd事件就会被触发,如果针对单独目的使用Application,这个事件可以通过Application在利用Unload按钮卸载时进行触发
。一个Application_OnEnd事件肯定发生在Session_OnEnd事件之后。
Application_OnStart和Application_OnEnd事件都是触发唯一一个脚本程序。而且这些事件都在一个文件中,即Global.asax文件。
应该注意的是,由于Application对象是多用户共享的,因此它与Session对象有着本质的区别。同时Application对象不会因为某一个甚至全
部用户离开就消失,一旦建立了Application对象,那么它就会一直存在到网站关闭或者这个Application对象被卸载。这经常可能是几周或者
几个月的时间。
由于Application对象创建后不会自己注销,因此,就要特别小心地使用,它会占用内存,要斟酌使用以免降低服务器对其他工作的响应速度
。Application对象被中止的方法有3种:服务被中止、Global.asax被改变或者该Application对象被卸载。
四、Session对象
Session对象是HttpSessionState的一个实例。该类为当前用户会话提供信息,还提供对可用于存储信息的会话范围的缓存的访问,以及控制
如何管理会话的方法。
Session的发明是填补HTTP协议的局限,HTTP协议工作过程是,用户发出请求,服务器端做出响应,这种用户端和服务器端之间的联系都是离
散的,非连续的。在HTTP协议中没有什么能够允许服务器端来跟踪用户请求的。在服务器端完成响应用户的请求后,服务器端不能持续与该浏
览器保持连接。从网站的观点看,每一个新的请求都是单独存在的,因此,当用户在多个主页间转换时,就根本无法知道他的身份。
可以使用Session对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失
,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将
中止该会话。
当用户第一次请求给定的应用程序中的aspx文件时,ASP.NET将生成一个SessionID。SessionID是由一个复杂算法生成的号码,它唯一标识每
个用户会话。在新会话开始时,服务器将SessionID作为一个cookie存储在用户的Web浏览器中。
在将SessionID cookie存储于用户的浏览器之后,即使用户请求了另一个.aspx文件,或请求了运行在另一个应用程序中的.aspx文件,
ASP.NET仍会重用该cookie跟踪会话。与此相似,如果用户故意放弃会话或让会话超时,然后再请求另一个.aspx文件,那么ASP.NET将以同一个
cookie开始新的会话。只有当服务器管理员重新启动服务器,或用户重新启动Web浏览器时,此时存储在内存中的SessionID设置才被清除,用
户将会获得新的SessionID cookie。
通过重用SessionID cookie,Web应用程序将发送给用户浏览器的cookie数量降为最低。另外,如果用户决定该Web应用程序不需要会话管理
,就可以不让Web应用程序跟踪会话和向用户发送SessionID。
Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,另外其还经常被用在鉴别客户身份的程序中。
要注意的是,会话状态仅在支持cookie的浏览器中保留,如果客户关闭了cookie选项,Session也就不能发挥作用了。
ASP.NET的Session非常好用,能够利用Session对象来对Session全面控制,如果需要在一个用户的Session中存储信息,只需要简单地直接调
用Session对象就可以了,下面是个例子:
Session("Myname")=Response.form("Username");
Session("Mycompany")=Response.form("Usercompany");
一般情况下,无法用普通的脚本变量来进行这种处理,因为一般的变量只在一个单独主页内有效,而Session变量在用户离开网站前一直存在
、生效。
应注意的是Session对象是与特定用户相联系的。针对某一个用户赋值的Session对象是和其他用户的Session对象完全独立的,不会相互影响
。换句话说,这里面针对每一个用户保存的信息是每一个用户自己独享的,不会产生共享情况。
很明显,对于不同的用户,Session对象的Myname变量和Mycompany变量各自是不同的,当每个人在网站的不同主页间浏览时,这种针对个人
的变量会一直保留,这样作为身份认证是十分有效的。
1.Session对象的集合
(1)Contents集合
Session.contents集合包括所有未使用<OBJECT>标记而为该会话建立的项目。此集合可用于确定指定会话项的值或遍历集合并检索出会话中
所有项的列表。
语法:public HttpSessionState Contents {get;}
(2)StaticObjects集合
StaticObject集合包含Session对象范围中用<OBJECT>标记创建的所有对象。该集合可用于确定对象特定属性的值,或用于遍历集合并获取所
有对象的全部属性。
语法:public HttpStaticObjectsCollection StaticObjects {get;}
2.Session对象的属性
(1)SessionID属性
SessionID属性返回用户的会话标识符。在创建会话时,服务器会为每一个会话生成一个单独的标识符。会话标识符以长整形数据类型返回。
在很多情况下,SessionID可以用于Web页面注册统计。
不要用SessionID属性为数据库应用程序创建主关键字。这是因为,如果Web服务器重新启动,则部分SessionID的值可能同服务器终止前产生
的值相同。可以使用自动增加的列数据类型来代替,如SQL Server中的IDENTITY,或Access中的COUNTER。
(2)Timeout属性
服务器怎么知道一个Session对象结束了呢?换句话说,怎样知道用户是否已经离开了这个站点而去了另一个站点或者已经关掉电脑了呢?如
果一个人一直没有提出请求或者刷新主页长达20分钟,那么服务器就默认为用户已经离开了。这种策略就使得服务端可以释放对用户进程进行
跟踪时使用的资源。
对于有些网络站点,20分钟显然有些短,例如,对于网络围棋,考虑是需要很长时间的。如果20分钟就释放了资源,这个棋手就会被服务器
端“轰出局”。
有些网络站点则相反,资源有限而访问量又很大,没有什么需要耗费时间的信息传递,那么白白浪费资源是很可惜的,也会使其他访问者的
访问速度受到影响。
不过,对于ASP.NET来说,对这些进行控制都没什么难度,Session对象有这种Timeout属性,完全可以用Session对象限定时间。
3.Session对象的方法
Session对象的方法中有一个Abandon方法,该方法可删除所有存储在Session对象中的对象,并释放这些对象的资源。如果未明确地调用
Abandon方法,一旦会话超时,服务器将删除这些对象。
语法:public void Abandon();
Abandon方法被调用时,将按顺序删除当前的Session对象,不过在当前页中所有脚本命令都处理完后,对象才会被真正删除。这就是说,在
调用Abandon时,可以在当前页上访问存储在Session对象中的变量,但在随后的Web页上不行。当服务器处理完当前页时,下面示例将释放
Session对象资源:
Session.Abandon();
当用户的Session时间过期后,如果用户刷新了主页,那么该用户将被认为是新的访问者,所有以前的Session信息会全部失去。也可以利用
Abandon方法来撤销一个Session。这里再引入一个SessionID属性。该属性将自动为每一个Session分配不同的编号。
要说明的是,对于一个Session对象来说,无论用户怎样在主页间切换,只能有一个SessionID。但是由于这里面使用了Abandon方法,那么就
使得这个主页开辟了一个Session后随即消除,然后再开辟了一个,对于服务器端来说,是两个不同的Session对象,其中前面的已经关闭,后
面的仍然保持。
4.Session对象的事件
(1)Session_OnEnd事件。Session_OnEnd事件在会话被放弃或超时发生。在服务器内嵌对象中,只有Application,Server和Session对象可用
。
(2)Session_OnStart事件。Session_OnStart事件在服务器创建新会话时发生。服务器在执行请求的页之前先处理该脚本。Session_OnStart
事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。
Session_OnStart事件和Session_OnEnd事件的脚本位于特定的文件Global.asax中。
五、Server对象
Server对象是HttpServerUtility的一个实例。该对象提供对服务器上的方法和属性的访问。
1、Server对象的属性
Server对象包含ScriptTimeout属性。
ScriptTimeout属性指定脚本在结束前最大可运行多长时间。当处理服务器组件时,超时限制将不在生效。
语法:public int scriptTimeout {get;set;}
参数:NumSeconds指定脚本在被服务器结束前最大可运行的秒数。默认值为90秒。
当用户开发出来的脚本生成了一个十分巨大的主页时,用户肯定不希望主页显示到一半就超时了。那么可以利用Server对象的ScriptTimeout
属性定制合理的限制时间,如下所示:Server.ScriptTimeout=150;
2、Server对象的方法
(1)CreatObject方法。Server.CreateObject用于创建已经注册到服务器上的ActiveX组件实例。这是一个非常重要的特性,因为通过使用
ActiveX组件可以轻松地扩展ActiveX的能力,譬如数据库连接、文件访问、广告显示不能提供或不能简单地依靠单独使用ActiveX所能完成的功
能。
该方法已被重载,语法如下:
创建COM对象的服务器实例,该COM对象由对象的程序标识符(ProgID)标识。
public object CreateObject(string);
创建由对象类型标识的COM对象的一个服务器实例。
public object CreateObject(Type);
默认情况下,由Server.CreateObject方法创建的对象具有页作用域。这就是说,在当前ASP.NET页处理完成之后,服务器将自动破坏这些对
象。如果要创建有会话或应用程序作用域的对象,可以使用<OBJECT>标记并设置Session或Application对象的Scope属性,也可以在对话及应用
程序变量中存储该对象:
Session("ad")=Server.CreateObject("MSWC.AdRotator");
这里需要注意的是,不能创建与内嵌对象同名的对象实例,否则,如下列脚本将返回错误信息:
Response=Server.CreateObject("Response");
(2)HTMLEncode方法。HTMLEncode方法允许对特定的字符串进行HTML编码。虽然HTML可以显示大部分写入ASP.NET文件中的文本,但是当需
要实际包含HTML标记中所使用的字符时,就会遇到问题。这是因为,当浏览器读到这样的字符串时,会试图进行解释。
对字符串进行HTML编码并返回已编码的字符串。
public string HtmlEncode(string);
对字符串进行HTML编码,并将结果输出发送到TextWriter输出流。
public void HtmlEncode(string、TextWriter);
例如想说明<br>在HTML文件中将产生换行,用户可能这样写:
<HTML>
<BODY>
<FONT SIZE=3>在HTML中,符号<br>将进行换行操作</FONT>
</BODY>
</HTML>
浏览器显示为:
在HTML中,符号
将进行换行操作
上面语句运行的结果并没有显示用户想象的结果。为了避免此类问题,就需要使用Server对象的HtmlEncode方法,采用对应的不由浏览器解
释的HTML编码替代HTML标记字符。所以,用下面的代码才能显示正确的HtmlEncode字符串,从而在浏览器中按需要输出文本。
Response.write(Server.HTMLEncode("在HTML中,符号<br>将进行换行操作"));
上面语句浏览器显示为:
在HTML中,符号<br>将进行换行操作
(3)URLEncode方法。就像HTMLEncode方法使客户可以将字符串翻译成可接受的HTML格式一样,Server对象的URLEncode方法可以根据URL规
则对字符串进行正确编码。当字符串数据以URL的形式传递到服务器时,在字符串中不允许出现空格,也不允许出现特殊字符。为此,如果希望
在发送字符串之前进行URL编码,可以使用Server.URLEncode方法。
该函数已被重载,语法如下:
对字符串进行URL编码,并返回已编码的字符串。
public string UrlEncode(string);
URL对字符串进行编码,并将结果输出发送到TextWriter输出流。
public void UrlEncode(string、TextWriter);
例如下面例子:
<%Response.Write(Server.URLEncode("http://www.microsoft.com"))%>
产生如下输出:
http %3A%2Fwww%2Emicrosoft%2Ecom
利用QueryString在不同主页间传递信息时,如果信息带有空格或特殊字符,那么必须进行Encode操作,因为如果不这样做,很可能使得接收
信息的那边接受到一些所不期望的奇怪字符串。注意不要对QueryString的名称以及等号进行Encode操作,只需要将其值进行Encode操作就可以
了。
进行了Encode操作后,效果如下:
Message=This+Query+String+has+been+URL+ENCODED%2E
用户并不需要考虑对上面的字符串再进行解码,会自动进行这样的处理。例如,假设有这样的脚本:
Request.QueryString("message");
这时,显示结果为:
This Query String has been URL encoded
(4)MapPath方法。MapPath方法将指定的相对或虚拟路径映射到服务器上相应的物理目录上。
语法:public string MapPath(string path);
参数path表示指定要映射物理目录的相对或虚拟路径。若Path以一个正斜杠(/)或反斜杠(\)开始,则MapPath方法返回路径时将Path视为完整
的虚拟路径。若Path不是以斜杠开始,则MapPath方法返回同页面文件中已有的路径相对的路径。这里需要注意的是MapPath方法不检查返回的
路径是否正确或在服务器上是否存在。
对于下列示例,文件data.txt和包含下列脚本的test.aspx文件都位于目录C:\Inetpub\wwwroot\aspx下。C:\Inetpub\wwwroot目录被设置为
服务器的宿主目录。下列示例使用服务器变量PATH_INFO映射当前文件的物理路径。以下脚本:
Server.mappath(Request.ServerVariables("PATH_INFO"));
输出:c:\inetpub\wwwroot\asp\test.aspx
由于下列示例中的路径参数不是以斜杠字符开始的,所以它们被相对映射到当前目录,此处是目录C:\Inetpub\wwwroot\aspx.以下脚本:
Server.mappath("data.txt");
Server.mappath("aspx/data.txt");
输出:
c:\inetpub\wwwroot\aspx\data.txt
c:\inetpub\wwwroot\aspx\aspx\data.txt
(六)cookie
Cookie就是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。信息的片断以‘键/
值’对的形式存储。
Cookie是保存在客户机硬盘上的一个文本文件,可以存储有关特定客户端、会话或应用程序的信息,在.NET中对应HttpCookie类。
有两种类型的Cookie:会话Cookie(Session Cookie)和持久性Cookie。前者是临时性的,一旦会话状态结束它将不复存在;后者则具有确定
的过期日期,在过期之前Cookie在用户的计算机上以文本文件的形式存储。
在服务器上创建并向客户端输出Cookie可以利用Response对象实现。
Response对象支持一个名为Cookies的集合,可以将Cookie对象添加到该集合中,从而向客户端输出Cookie。
通过Request对象的Cookies集合来访问Cookie