服务器端(Server Side)
我们研究了页面生命周期以及页面如何包含各种控件。 页面本身被实例化为控制对象。 所有Web表单基本上都是ASP.NET Page类的实例。 页面类具有以下与内部对象对应的非常有用的属性:
- Session
- Application
- Cache
- Request
- Response
- Server
- User
- Trace
我们将在适当的时候讨论这些对象。 在本教程中,我们将探索Server对象,Request对象和Response对象。
服务器对象
Asp.NET中的Server对象是System.Web.HttpServerUtility类的一个实例。 HttpServerUtility类提供了许多属性和方法来执行各种作业。
Server对象的属性和方法
HttpServerUtility类的方法和属性通过ASP.NET提供的内部Server对象公开。
下表提供了属性列表:
属性 | 描述 |
---|---|
MachineName | 服务器计算机的名称 |
ScriptTimeOut | 以秒为单位获取和设置请求超时值。 |
下表提供了一些重要方法的列表:
方法 | 描述 |
---|---|
CreateObject(String) | 创建由其ProgID(程序ID)标识的COM对象的实例。 |
CreateObject(Type) | 创建由其Type标识的COM对象的实例。 |
Equals(Object) | 确定指定的Object是否等于当前的Object。 |
Execute(String) | 在当前请求的上下文中执行指定虚拟路径的处理程序。 |
Execute(String, Boolean) | 在当前请求的上下文中执行指定虚拟路径的处理程序,并指定是否清除QueryString和Form集合。 |
GetLastError | Returns the previous exception. |
GetType | 获取当前实例的Type。 |
HtmlEncode | 将普通字符串更改为具有合法HTML字符的字符串。 |
HtmlDecode | 将Html字符串转换为普通字符串。 |
ToString | 返回表示当前对象的字符串。 |
Transfer(String) | 对于当前请求,终止当前页面的执行,并使用页面的指定URL路径开始执行新页面。 |
UrlDecode | 将URL字符串转换为普通字符串。 |
UrlEncodeToken | 与UrlEncode一样,但在包含Base64编码数据的字节数组上。 |
UrlDecodeToken | 与UrlDecode一样,但在包含Base64编码数据的字节数组上。 |
MapPath | 返回与服务器上指定虚拟文件路径对应的物理路径。 |
Transfer | 将执行转移到当前应用程序中的另一个网页。 |
请求对象
请求对象是System.Web.HttpRequest类的实例。 它表示将页面加载到浏览器中的HTTP请求的值和属性。
此对象提供的信息由更高级别的抽象(Web控件模型)包装。 但是,此对象有助于检查某些信息,例如客户端浏览器和cookie。
请求对象的属性和方法
下表提供了Request对象的一些值得注意的属性:
属性 | 描述 |
---|---|
AcceptTypes | 获取客户端支持的MIME接受类型的字符串数组。 |
ApplicationPath | 获取ASP.NET应用程序在服务器上的虚拟应用程序根路径。 |
Browser | 获取或设置有关请求客户端浏览器功能的信息。 |
ContentEncoding | 获取或设置entity-body的字符集。 |
ContentLength | 指定客户端发送的内容的长度(以字节为单位)。 |
ContentType | 获取或设置传入请求的MIME内容类型。 |
Cookies | 获取客户端发送的cookie集合。 |
FilePath | 获取当前请求的虚拟路径。 |
Files | 获取客户端以多部分MIME格式上载的文件集合。 |
Form | 获取表单变量的集合。 |
Headers | 获取HTTP标头的集合。 |
HttpMethod | 获取客户端使用的HTTP数据传输方法(如GET,POST或HEAD)。 |
InputStream | 获取传入HTTP实体主体的内容。 |
IsSecureConnection | 获取一个值,该值指示HTTP连接是否使用安全套接字(即HTTPS)。 |
QueryString | 获取HTTP查询字符串变量的集合。 |
RawUrl | 获取当前请求的原始URL。 |
RequestType | 获取或设置客户端使用的HTTP数据传输方法(GET或POST)。 |
ServerVariables | 获取Web服务器变量的集合。 |
TotalBytes | 获取当前输入流中的字节数。 |
Url | 获取有关当前请求的URL的信息。 |
UrlReferrer | 获取有关链接到当前URL的客户端先前请求的URL的信息。 |
UserAgent | 获取客户端浏览器的原始用户代理字符串。 |
UserHostAddress | 获取远程客户端的IP主机地址。 |
UserHostName | 获取远程客户端的DNS名称。 |
UserLanguages | 获取客户端语言首选项的排序字符串数组。 |
下表提供了一些重要方法的列表:
方法 | 描述 |
---|---|
BinaryRead | 从当前输入流执行指定字节数的二进制读取。 |
Equals(Object) | 确定指定的对象是否等于当前对象。 (继承自object。) |
GetType | 获取当前实例的Type。 |
MapImageCoordinates | 将传入的图像 - 场形式参数映射到适当的x坐标和y坐标值。 |
MapPath(String) | 将指定的虚拟路径映射到物理路径。 |
SaveAs | 将HTTP请求保存到磁盘。 |
ToString | 返回表示当前对象的字符串。 |
ValidateInput | 对通过Cookies,Form和QueryString属性访问的集合进行验证。 |
响应对象
Response对象表示服务器对客户端请求的响应。 它是System.Web.HttpResponse类的一个实例。
在ASP.NET中,响应对象在向客户端发送HTML文本时不起任何重要作用,因为服务器端控件具有嵌套的,面向对象的方法来呈现自己。
但是,HttpResponse对象仍提供一些重要的功能,如cookie功能和Redirect()方法。 Response.Redirect()方法允许将用户转移到应用程序内部和外部的另一个页面。 它需要往返。
响应对象的属性和方法
下表提供了Response对象的一些值得注意的属性:
属性 | 描述 |
---|---|
Buffer | 获取或设置一个值,该值指示是否缓冲输出并在完成响应完成处理后发送它。 |
BufferOutput | 获取或设置一个值,该值指示是否缓冲输出并在完成整个页面处理后发送它。 |
Charset | 获取或设置输出流的HTTP字符集。 |
ContentEncoding | 获取或设置输出流的HTTP字符集。 |
ContentType | 获取或设置输出流的HTTP MIME类型。 |
Cookies | 获取响应cookie集合。 |
Expires | 获取或设置在浏览器上缓存的页面到期之前的分钟数。 |
ExpiresAbsolute | 获取或设置从缓存中删除缓存信息的绝对日期和时间。 |
HeaderEncoding | 获取或设置一个编码对象,该对象表示当前标头输出流的编码。 |
Headers | 获取响应头的集合。 |
IsClientConnected | 获取一个值,该值指示客户端是否仍连接到服务器。 |
Output | 允许将文本输出到传出HTTP响应流。 |
OutputStream | 启用到传出HTTP内容正文的二进制输出。 |
RedirectLocation | 获取或设置Http Location标头的值。 |
Status | 设置返回给客户端的状态行。 |
StatusCode | 获取或设置返回给客户端的输出的HTTP状态代码。 |
StatusDescription | 获取或设置返回给客户端的输出的HTTP状态字符串。 |
SubStatusCode | 获取或设置限定响应状态代码的值。 |
SuppressContent | 获取或设置一个值,该值指示是否将HTTP内容发送到客户端。 |
下表提供了一些重要方法的列表:
方法 | 描述 |
---|---|
AddHeader | 将HTTP标头添加到输出流。 提供AddHeader是为了与早期版本的ASP兼容。 |
AppendCookie | Infrastructure将HTTP cookie添加到内部cookie集合中。 |
AppendHeader | 将HTTP标头添加到输出流。 |
AppendToLog | 将自定义日志信息添加到InterNET信息服务(IIS)日志文件。 |
BinaryWrite | 将一串二进制字符写入HTTP输出流。 |
ClearContent | 清除缓冲区流中的所有内容输出。 |
Close | 关闭与客户端的套接字连接。 |
End | 将所有当前缓冲的输出发送到客户端,停止执行页面,并引发EndRequest事件。 |
Equals(Object) | 确定指定的对象是否等于当前对象。 |
Flush | 将所有当前缓冲的输出发送到客户端。 |
GetType | 获取当前实例的Type。 |
Pics | 将HTTP PICS-Label标头附加到输出流。 |
Redirect(String) | 将请求重定向到新URL并指定新URL。 |
Redirect(String, Boolean) | 将客户端重定向到新URL。 指定新URL以及是否应终止当前页面的执行。 |
SetCookie | 更新cookie集合中的现有cookie。 |
ToString | 返回表示当前对象的字符串。 |
TransmitFile(String) | 将指定的文件直接写入HTTP响应输出流,而不在内存中缓冲它。 |
Write(Char) | 将字符写入HTTP响应输出流。 |
Write(Object) | 将对象写入HTTP响应流。 |
Write(String) | 将字符串写入HTTP响应输出流。 |
WriteFile(String) | 将指定文件的内容作为文件块直接写入HTTP响应输出流。 |
WriteFile(String, Boolean) | 将指定文件的内容直接写入HTTP响应输出流作为内存块。 |
例子 (Example)
以下简单示例具有文本框控件,其中用户可以输入名称,用于将信息发送到服务器的按钮,以及用于显示客户端计算机的URL的标签控件。
内容文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="server_side._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Enter your name:
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" />
<br />
<asp:Label ID="Label1" runat="server"/>
</div>
</form>
</body>
</html>
Button1_Click背后的代码:
protected void Button1_Click(object sender, EventArgs e) {
if (!String.IsNullOrEmpty(TextBox1.Text)) {
// Access the HttpServerUtility methods through
// the intrinsic Server object.
Label1.Text = "Welcome, " + Server.HtmlEncode(TextBox1.Text) + ". <br/> The url is " + Server.UrlEncode(Request.Url.ToString())
}
}
运行该页面以查看以下结果: