我們已經研究了頁面生命週期和一個頁面如何包含不同的控制項。頁面本身作為一個控制物件被實例化。所有的web 表單基本上就是ASP.NET 頁面類別的實例。頁麵類別有以下極為有用的屬性,與內部物件所對應:
會話
應用程式
快取
請求
回應
伺服器
使用者
追蹤
我們會在適當的時間裡討論每一個對象。在本教程中我們將會探索Server 對象,Request 物件和Response 物件。
ASP.NET 中的伺服器物件是System.Web.HttpServerUtility 類別的一個實例。 The HttpServerUtility 類別提供了大量的屬性和方法來執行不同的工作。
HttpServerUtility 類別的方法和屬性透過由ASP.NET 提供的內部伺服器物件公開的。
以下表格提供了HttpServerUtility 類別一系列的屬性。
屬性 | 描述 |
---|---|
MachineName | 伺服器電腦的名稱 |
ScriptTimeOut | 以秒為單位取得和設定請求逾時的值 |
以下表格提供了一些重要的方法:
方法 | 描述 |
---|---|
CreateObject(String) | 建立一個COM 物件的實例,由其ProgID 驗證。 |
CreateObject(Type) | 建立一個COM 物件的實例,由其Type 驗證。 |
Equals(Object) | 決定具體的對像是否和現有對像一致。 |
Execute(String) | 在目前請求的上下文中執行處理應用程式指定的虛擬路徑。 |
Execute(String, Boolean) | 在目前請求的上下文中執行處理程序指定的虛擬路徑,指定是否清除QueryString 及表單集合。 |
GetLastError | 傳回之前的異常。 |
GetType | 取得現有實例的類型。 |
HtmlEncode | 將一個普通的字串變成合法的HTML 字串。 |
HtmlDecode | 將一個Html 字串轉換成一個普通的字串。 |
ToString | 傳回一個表示當前物件的字串。 |
Transfer(String) | 對於目前請求,終止目前頁面的執行並透過指定頁面的URL 路徑,開始執行一個新頁面。 |
UrlDecode | 將一個URL 字串轉換成一個普通的字串。 |
UrlEncodeToken | 與UrlEncode 作用相同,但是在一個位元組數組中,包含以Base64 編碼的資料。 |
UrlDecodeToken | 與UrlDecode 工作相同,但在一個位元組數組中,包含以Base64 編碼的資料。 |
MapPath | 傳回與指定的虛擬伺服器上的檔案路徑相對應的實體路徑。 |
Transfer | 在目前應用程式上轉移執行到另一個web 頁面。 |
請求物件是System.Web.HttpRequest 類別的一個實例。它代表了HTTP 請求的值和屬性,使頁面載入到瀏覽器中。
此物件所呈現的資訊被封裝在更高層級的抽像中(web 控制項模型)。然而,這個物件可以幫助檢查一些訊息,例如客戶端瀏覽器和資訊記錄程式。
下表提供了請求物件一些值得注意的屬性:
屬性 | 描述 |
---|---|
AcceptTypes | 取得一個使用者支援的MIME 接受類型的字串陣列。 |
ApplicationPath | 在伺服器上取得ASP.NET 應用程式的真實應用程式根路徑。 |
Browser | 取得或設定關於請求使用者瀏覽器能力的資訊。 |
ContentEncoding | 取得或設定字符集的實體。 |
ContentLength | 指定由客戶端發送的內容的長度以位元組為單位。 |
ContentType | 取得或設定傳入請求的MIME 內容類型。 |
Cookies | 取得客戶端發送的cookies 集合。 |
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 屬性的集合。 |
回應對象代表了伺服器對於使用者請求的回應。它是System.Web.HttpResponse 類別的一個實例。
在ASP.NET 中,回應物件在傳送HTML 文字給使用者的過程中不扮演任何重要的角色,因為伺服器端控制項有嵌套的、物件導向的方法來自我呈現。
然而,HttpResponse 物件提供了一些重要的功能,例如cookie 特點和Redirect() 方法。 Response.Redirect() 方法允許將使用者轉移到另一個頁面,在應用程式內部或應用程式外部均可。它需要一個往返過程。
下表提供了一些回應物件值得注意的屬性:
屬性 | 描述 |
---|---|
Buffer | 取得或設定一個值,表示是否緩衝輸出,並在完整的回應程式結束後將其發送。 |
BufferOutput | 取得或設定一個值,表名是否緩衝輸出,並在完整頁面結束進城後將其發送。 |
Charset | 取得或設定輸出流的HTTP 字元集。 |
ContentEncoding | 取得或設定輸出流的HTTP 字元集。 |
ContentType | 取得或設定輸出流的HTTP MIME 類型。 |
Cookies | 取得相應cookie 集合。 |
Expires | 取得或設定一個瀏覽器上快取的頁面在到期前的分鐘數。 |
ExpiresAbsolute | 取得或設定從快取中移除快取資訊的絕對日期和時間。 |
HeaderEncoding | 取得或設定一個編碼對象,代表現有標題輸出流的編碼。 |
Headers | 取得響應標題的集合。 |
IsClientConnected | 取得一個值,表示使用者是否仍與伺服器相連。 |
Output | 使輸出的文字到輸出的HTTP 回應流。 |
OutputStream | 使二進位輸出到輸出的HTTP 內容本體。 |
RedirectLocation | 取得或設定Http 標題位置的值。 |
Status | 設定狀態欄,返回客戶端。 |
StatusCode | 取得或設定返回客戶端的HTTP 輸出狀態碼。 |
StatusDescription | 取得或設定傳回給客戶端的HTTP 輸出狀態字串。 |
SubStatusCode | 取得或設定一個值限制回應的狀態碼。 |
SuppressContent | 取得或設定一個值,表示是否發送HTTP 內容到客戶端。 |
下表提供了一些重要的方法:
方法 | 描述 |
---|---|
AddHeader | 為輸出流新增一個HTTP 標題。提供AddHeader 是為了ASP 早期版本的相容性。 |
AppendCookie | 基礎架構為內部cookie 集合新增一個HTTP 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()) }}
運行頁面查看以下結果: