我們已經(jīng)研究了頁(yè)面生命周期和一個(gè)頁(yè)面如何包含不同的控件。頁(yè)面本身作為一個(gè)控制對(duì)象被實(shí)例化。所有的 web 表單基本上是 ASP.NET 頁(yè)面類(lèi)的實(shí)例。頁(yè)面類(lèi)有以下極其有用的屬性,與內(nèi)部對(duì)象所對(duì)應(yīng):
我們會(huì)在適當(dāng)?shù)臅r(shí)間里討論每一個(gè)對(duì)象。在本教程中我們將會(huì)探索 Server 對(duì)象,Request 對(duì)象和 Response 對(duì)象。
ASP.NET 中的服務(wù)器對(duì)象是 System.Web.HttpServerUtility 類(lèi)的一個(gè)實(shí)例。The HttpServerUtility 類(lèi)提供了大量的屬性和方法來(lái)執(zhí)行不同的工作。
HttpServerUtility 類(lèi)的方法和屬性通過(guò)由 ASP.NET 提供的內(nèi)部服務(wù)器對(duì)象公開(kāi)的。
以下表格提供了 HttpServerUtility 類(lèi)一系列的屬性。
屬性 | 描述 |
---|---|
MachineName | 服務(wù)器電腦的名稱(chēng) |
ScriptTimeOut | 以秒為單位獲取和設(shè)置請(qǐng)求超時(shí)的值 |
以下表格提供了一些重要的方法:
方法 | 描述 |
---|---|
CreateObject(String) | 創(chuàng)建一個(gè) COM 對(duì)象的實(shí)例,由其 ProgID 驗(yàn)證。 |
CreateObject(Type) | 創(chuàng)建一個(gè) COM 對(duì)象的實(shí)例,由其 Type 驗(yàn)證。 |
Equals(Object) | 決定具體的對(duì)象是否和現(xiàn)有對(duì)象一致。 |
Execute(String) | 在當(dāng)前請(qǐng)求的上下文中執(zhí)行處理應(yīng)用程序指定的虛擬路徑。 |
Execute(String, Boolean) | 在當(dāng)前請(qǐng)求的上下文中執(zhí)行處理程序指定的虛擬路徑,指定是否清除 QueryString 及表單集合。 |
GetLastError | 返回之前的異常。 |
GetType | 獲取現(xiàn)有實(shí)例的類(lèi)型。 |
HtmlEncode | 將一個(gè)普通的字符串變成合法的 HTML 字符串。 |
HtmlDecode | 將一個(gè) Html 字符串轉(zhuǎn)化成一個(gè)普通的字符串。 |
ToString | 返回一個(gè)表示當(dāng)前對(duì)象的字符串。 |
Transfer(String) | 對(duì)于當(dāng)前請(qǐng)求,終止當(dāng)前頁(yè)面的執(zhí)行并通過(guò)指定頁(yè)面的 URL 路徑,開(kāi)始執(zhí)行一個(gè)新頁(yè)面。 |
UrlDecode | 將一個(gè) URL 字符串轉(zhuǎn)化成一個(gè)普通的字符串。 |
UrlEncodeToken | 與 UrlEncode 作用相同,但是在一個(gè)字節(jié)數(shù)組中,包含以 Base64 編碼的數(shù)據(jù)。 |
UrlDecodeToken | 與 UrlDecode 工作相同,但是在一個(gè)字節(jié)數(shù)組中,包含以 Base64 編碼的數(shù)據(jù)。 |
MapPath | 返回與指定的虛擬服務(wù)器上的文件路徑相對(duì)應(yīng)的物理路徑。 |
Transfer | 在當(dāng)前應(yīng)用程序上轉(zhuǎn)移執(zhí)行到另一個(gè) web 頁(yè)面。 |
請(qǐng)求對(duì)象是 System.Web.HttpRequest 類(lèi)的一個(gè)實(shí)例。它代表了 HTTP 請(qǐng)求的值和屬性,使頁(yè)面加載到瀏覽器中。
此對(duì)象所呈現(xiàn)的信息被封裝在更高級(jí)別的抽象中(web 控件模型)。然而,這個(gè)對(duì)象可以幫助檢查一些信息,例如客戶端瀏覽器和信息記錄程序。
下表提供了請(qǐng)求對(duì)象一些值得注意的屬性:
屬性 | 描述 |
---|---|
AcceptTypes | 獲取一個(gè)用戶支持的 MIME 接受類(lèi)型的字符串?dāng)?shù)組。 |
ApplicationPath | 在服務(wù)器上獲取 ASP.NET 應(yīng)用程序的真實(shí)應(yīng)用程序根路徑。 |
Browser | 獲取或設(shè)置關(guān)于請(qǐng)求用戶瀏覽器能力的信息。 |
ContentEncoding | 獲取或設(shè)置字符集的實(shí)體。 |
ContentLength | 指定由客戶端發(fā)送的內(nèi)容的長(zhǎng)度以字節(jié)為單位。 |
ContentType | 獲取或設(shè)置傳入請(qǐng)求的 MIME 內(nèi)容類(lèi)型。 |
Cookies | 獲取客戶端發(fā)送的 cookies 集合。 |
FilePath | 獲取當(dāng)前請(qǐng)求的真實(shí)路徑。 |
Files | 以多部分的 MIME 格式獲取客戶端上傳文件的集合。 |
Form | 獲取表單變量的集合。 |
Headers | 獲取 HTTP 標(biāo)題的集合。 |
HttpMethod | 獲取用戶使用的 HTTP 數(shù)據(jù)轉(zhuǎn)移方法(如 GET,POST,或者 HEAD) |
InputStream | 獲取傳入的 HTTP 的實(shí)體內(nèi)容。 |
IsSecureConnection | 獲取一個(gè)值,該值指示 HTTP 連接是否使用安全套接字(即HTTPS)。 |
QueryString | 獲取 HTTP 詢問(wèn)字符串變量的集合。 |
RawUrl | 獲取當(dāng)前請(qǐng)求的原始 URL。 |
RequestType | 獲取或設(shè)置由用戶使用的 HTTP 數(shù)據(jù)轉(zhuǎn)移方法(GET 或者 POST)。 |
ServerVariables | 獲取 Web 服務(wù)器變量的集合。 |
TotalBytes | 獲取現(xiàn)有輸入流的字節(jié)數(shù)。 |
Url | 獲取關(guān)于現(xiàn)有請(qǐng)求的 URL 的信息。 |
UrlReferrer | 獲取關(guān)于與現(xiàn)有 URL 相鏈接的客戶端之前的請(qǐng)求的 URL 信息。 |
UserAgent | 獲取客戶端瀏覽器的原始用戶代理字符串。 |
UserHostAddress | 獲取遠(yuǎn)程客戶機(jī)的 IP 主機(jī)地址。 |
UserHostName | 獲取遠(yuǎn)程客戶機(jī)的 DNS 名稱(chēng)。 |
UserLanguages | 獲取客戶端語(yǔ)言首選項(xiàng)的排序字符串?dāng)?shù)組。 |
下表提供了一些重要的方法:
方法 | 描述 |
---|---|
BinaryRead | 從當(dāng)前的輸入流中執(zhí)行一個(gè)指定字節(jié)數(shù)的二進(jìn)制讀數(shù)。 |
Equals(Object) | 決定指定對(duì)象是否等同于現(xiàn)有對(duì)象。(繼承自對(duì)象) |
GetType | 獲取現(xiàn)有實(shí)例的類(lèi)型。 |
MapImageCoordinates | 將傳入的象場(chǎng)表單參數(shù)繪制成適當(dāng)?shù)?x 坐標(biāo)和 y 坐標(biāo)值。 |
MapPath(String) | 將指定的真實(shí)路徑繪制成一個(gè)物理路徑。 |
SaveAs | 在硬盤(pán)中存為一個(gè) HTTP 請(qǐng)求。 |
ToString | 返回一個(gè)代表現(xiàn)有對(duì)象的字符串。 |
ValidateInput | 導(dǎo)致驗(yàn)證發(fā)生,通過(guò)訪問(wèn) Cookies,F(xiàn)orm,QueryString 屬性的集合。 |
響應(yīng)對(duì)象代表了服務(wù)器對(duì)于用戶請(qǐng)求的響應(yīng)。它是 System.Web.HttpResponse 類(lèi)的一個(gè)實(shí)例。
在 ASP.NET 中,響應(yīng)對(duì)象在給用戶發(fā)送 HTML 文本的過(guò)程中不扮演任何重要的角色,因?yàn)榉?wù)器端控件有嵌套的、面向?qū)ο蟮姆椒▉?lái)自我呈現(xiàn)。
然而,HttpResponse 對(duì)象提供了一些重要的功能,比如 cookie 特點(diǎn)和 Redirect() 方法。 Response.Redirect() 方法允許將用戶轉(zhuǎn)移到另一個(gè)頁(yè)面,在應(yīng)用程序內(nèi)部或應(yīng)用程序外部均可。它需要一個(gè)往返過(guò)程。
下表提供了一些響應(yīng)對(duì)象值得注意的屬性:
屬性 | 描述 |
---|---|
Buffer | 獲取或設(shè)置一個(gè)值,表明是否緩沖輸出,并在完整的響應(yīng)程序結(jié)束后將其發(fā)送。 |
BufferOutput | 獲取或設(shè)置一個(gè)值,表名是否緩沖輸出,并在完整頁(yè)面結(jié)束進(jìn)城后將其發(fā)送。 |
Charset | 獲取或設(shè)置輸出流的 HTTP 字符集。 |
ContentEncoding | 獲取或設(shè)置輸出流的 HTTP 字符集。 |
ContentType | 獲取或設(shè)置輸出流的 HTTP MIME 類(lèi)型。 |
Cookies | 獲取相應(yīng) cookie 集合。 |
Expires | 獲取或設(shè)置一個(gè)瀏覽器上緩存的頁(yè)面在到期前的分鐘數(shù)。 |
ExpiresAbsolute | 獲取或設(shè)置從緩存中移除緩存信息的絕對(duì)日期和時(shí)間。 |
HeaderEncoding | 獲取或設(shè)置一個(gè)編碼對(duì)象,代表現(xiàn)有標(biāo)題輸出流的編碼。 |
Headers | 獲取響應(yīng)標(biāo)題的集合。 |
IsClientConnected | 獲取一個(gè)值,表明用戶是否仍和服務(wù)器相連。 |
Output | 使輸出的文本到輸出的 HTTP 響應(yīng)流。 |
OutputStream | 使二進(jìn)制輸出到輸出的 HTTP 內(nèi)容本體。 |
RedirectLocation | 獲取或設(shè)置 Http 標(biāo)題位置的值。 |
Status | 設(shè)置狀態(tài)欄,返回給客戶端。 |
StatusCode | 獲取或設(shè)置返回到客戶端的 HTTP 輸出狀態(tài)碼。 |
StatusDescription | 獲取或設(shè)置返回給客戶端的 HTTP 輸出狀態(tài)字符串。 |
SubStatusCode | 獲取或設(shè)置一個(gè)值限制響應(yīng)的狀態(tài)碼。 |
SuppressContent | 獲取或設(shè)置一個(gè)值,表明是否發(fā)送 HTTP 內(nèi)容到客戶端。 |
下表提供了一些重要的方法:
方法 | 描述 |
---|---|
AddHeader | 給輸出流添加一個(gè) HTTP 標(biāo)題。提供 AddHeader 是為了 ASP 早期版本的兼容性。 |
AppendCookie | 基礎(chǔ)設(shè)施為內(nèi)部 cookie 集合添加一個(gè) HTTP cookie。 |
AppendHeader | 給輸出流添加一個(gè) HTTP 標(biāo)題。 |
AppendToLog | 將自定義日志信息添加到 InterNET 信息服務(wù)(IIS)日志文件。 |
BinaryWrite | 將一串二進(jìn)制字符寫(xiě)入 HTTP 輸出流。 |
ClearContent | 清除緩沖流中的所有內(nèi)容輸出。 |
Close | 關(guān)閉客戶端套接字。 |
End | 發(fā)送所有現(xiàn)有的緩沖輸出給客戶端,停止頁(yè)面執(zhí)行,并且引發(fā) EndRequest 事件。 |
Equals(Object) | 確定指定對(duì)象是否等同于現(xiàn)有對(duì)象。 |
Flush | 發(fā)送所有現(xiàn)有緩沖輸出到客戶端。 |
GetType | 獲取現(xiàn)有實(shí)例的類(lèi)型。 |
Pics | 將一個(gè) HTTP PICS-Label 標(biāo)題附加到輸出流。 |
Redirect(String) | 將請(qǐng)求重定向到一個(gè)新的 URL 并指定新的 URL。 |
Redirect(String, Boolean) | 將客戶端重定向到一個(gè)新的 URL。指定新的 URL 并且之指定現(xiàn)有頁(yè)面是否應(yīng)該終止。 |
SetCookie | 在 cookie 集合中更新現(xiàn)存 cookie。 |
ToString | 返回代表現(xiàn)有對(duì)象的一個(gè)字符串 |
TransmitFile(String) | 直接編寫(xiě)指定的文件到一個(gè) HTTP 響應(yīng)輸出流中,不需要在內(nèi)存中緩沖。 |
Write(Char) | 編寫(xiě)一個(gè)字符到一個(gè) HTTP 響應(yīng)輸出流中。 |
Write(Object) | 編寫(xiě)一個(gè)對(duì)象到一個(gè) HTTP 響應(yīng)流中。 |
Write(String) | 編寫(xiě)一個(gè)字符串到一個(gè) HTTP 響應(yīng)輸出流中。 |
WriteFile(String) | 直接編寫(xiě)指定文件的內(nèi)容到一個(gè) HTTP 響應(yīng)輸出流中,作為一個(gè)文件塊。 |
WriteFile(String, Boolean) | 直接編寫(xiě)指定文件的內(nèi)容到一個(gè) HTTP 響應(yīng)輸出流中,作為一個(gè)內(nèi)存塊。 |
以下簡(jiǎn)單的例子有一個(gè)文本框控件,用戶可以輸入名稱(chēng),一個(gè)按鈕可以發(fā)送信息到服務(wù)器,還有一個(gè)標(biāo)簽控件來(lái)顯示客戶端計(jì)算機(jī)的 URL。
內(nèi)容文件:
<%@ 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 點(diǎn)擊后的代碼:
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())
}
}
運(yùn)行頁(yè)面查看以下結(jié)果:
更多建議: