17.4 Server对象
Server对象是System.Web.HttpServerUtility类的实例,其原型如下所示:
[Browsable(false)]
[DesignerSerializationVisibility(
DesignerSerializationVisibility.Hidden)]
public HttpServerUtility Server{get;}
其中,System.Web.HttpServerUtility类提供了许多用于处理Web请求辅助方法,如表17-4所示。
其中,Transfer方法的功能与Response对象的Redirect方法相似,但它的速度更快。它传输到的页必须是.aspx页。例如,如果传输到的是.asp或.asmx页,则是无效的。与此同时,Transfer方法保留QueryString和Form集合。使用示例如下面的代码所示:
Server.Transfer("Employee.aspx");
下面的示例全面地演示如何使用Server对象的HtmlEncode方法和UrlEncode方法。其中,HtmlEncode方法有助于确保用户提供的所有字符串输入将作为静态文本显示在浏览器中,而不是作为可执行脚本或HTML元素进行呈现。UrlEncode方法对URL进行编码,以便在HTTP流中正确传输它们。
下面先来定义一个简单的页面,如下面的代码所示:
<form id="form1"runat="server">
<div>
请输入你的名称:<br/>
<asp:TextBox ID="TextBox1"runat="server"></asp:TextBox>
<asp:Button ID="Button1"runat="server"
OnClick="Button1_Click"Text="提交"
Style="height:26px"/>
<br/>
<asp:Label ID="Label1"runat="server"/>
</div>
</form>
为了能够真正了解使用HtmlEncode与不使用HtmlEncode的差别,在这里定义了一个字符串str,并分别将str以两种形式输出。如下面的代码所示:
private void Page_Load(object sender, System.EventArgs e)
{
string str="<b>我是</b><font size=12>ASP.NET</font>";
if(!String.IsNullOrEmpty(TextBox1.Text))
{
Label1.Text="Welcome,"+
Server.HtmlEncode(TextBox1.Text)+
"<br/>未调用Server.HtmlEncode:"+str+
"<br/>调用Server.HtmlEncode:"+Server.HtmlEncode(str)+
".<br/>The url is:<br/>"+
Server.UrlEncode(Request.Url.ToString());
}
}
示例运行结果如图17-2所示。
图 17-2 示例运行结果
查看页面源代码,如下面的代码所示。你会发现str字符串经过HtmlEncode编码之后,str字符串里的HTML标签自动转换为等效的HTML标签,如将<b>转换为〈b〉。这样,页面才能够将str字符串按照其原始内容显示出来,而不是将str字符串里的HTML标签作为指令来解释。
未调用Server.HtmlEncode:<b>我是</b>
<font size=12>ASP.NET</font>
<br/>
调用Server.HtmlEncode:〈b〉我是〈/b〉〈font size=12
〉ASP.NET〈/font〉.
除此之外,Server对象还提供两个非常有用的属性:
❑MachineName用于获取服务器的计算机名称。
使用示例如下面的代码所示:
Response.Write(Server.MachineName);
该代码将输出我的计算机名称:MAWEI-2EE0C5B1A。
❑ScriptTimeout用于获取和设置请求超时值(以秒计)。