ASP.NET 服务器端
我们研究了页面生命周期以及页面如何包含各种控件。页面本身被实例化为一个控件对象。所有 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) |
创建由其类型标识的 COM 对象的实例。 |
Equals(Object) |
判断指定的Object是否等于当前的Object。 |
Execute(String) |
在当前请求的上下文中执行指定虚拟路径的处理程序。 |
Execute(String, Boolean) |
在当前请求的上下文中执行指定虚拟路径的处理程序,并指定是否清除QueryString和Form集合。 |
GetLastError |
返回上一个异常。 |
GetType |
获取当前实例的类型。 |
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) |
确定指定对象是否等于当前对象。 (继承自对象。) |
GetType |
获取当前实例的类型。 |
MapImageCoordinates |
将传入的图像字段表单参数映射到适当的 x 坐标和 y 坐标值。 |
MapPath(String) |
将指定的虚拟路径映射到物理路径。 |
SaveAs |
将 HTTP 请求保存到磁盘。 |
ToString |
返回一个代表当前对象的字符串。 |
ValidateInput |
对通过 Cookies、Form 和 QueryString 属性访问的集合进行验证。 |
响应对象
Response 对象表示服务器对客户端请求的响应。它是 System.Web.HttpResponse 类的一个实例。
在 ASP.NET 中,响应对象在向客户端发送 HTML 文本方面没有任何重要作用,因为服务器端控件具有用于呈现自身的嵌套的面向对象的方法。
然而,HttpResponse 对象仍然提供了一些重要的功能,比如 cookie feature 和 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 内容。 |
下表提供了一些重要方法的列表:
方法 |
说明 |
添加标题 |
向输出流添加 HTTP 标头。提供 AddHeader 是为了与早期版本的 ASP 兼容。 |
AppendCookie |
Infrastructure 将 HTTP cookie 添加到内部 cookie 集合中。 |
AppendHeader |
向输出流添加 HTTP 标头。 |
AppendToLog |
将自定义日志信息添加到 Internet 信息服务 (IIS) 日志文件。 |
BinaryWrite |
将一串二进制字符写入 HTTP 输出流。 |
ClearContent |
清除缓冲区流中的所有内容输出。 |
Close |
关闭与客户端的套接字连接。 |
End |
将所有当前缓冲的输出发送到客户端,停止页面的执行,并引发 EndRequest 事件。 |
Equals(Object) |
确定指定对象是否等于当前对象。 |
Flush |
将所有当前缓冲的输出发送到客户端。 |
GetType |
获取当前实例的类型。 |
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 响应输出流。 |
示例
下面的简单示例有一个文本框控件,用户可以在其中输入名称,一个按钮将信息发送到服务器,以及一个标签控件,用于显示客户端计算机的 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())
}
}
运行页面查看如下结果:
