ASP.NET伺服器端


在這章中,我們研究頁面生命週期以及頁面如何包含各種控制元件。頁面本身被範例化為一個控制物件。所有的Web表單基本上都是ASP.NET Page類的範例。 Page類具有以下對應於內部物件的非常有用的屬性:

  • Session
  • Application
  • Cache
  • Request
  • Response
  • Server
  • User
  • Trace

我們將在適當的時候討論這些物件。在本教學中,我們將學習Server物件,Request物件和Response物件。

Server物件

Asp.NET中的Server物件是System.Web.HttpServerUtility類的一個範例。 HttpServerUtility類提供了許多執行各種作業的屬性和方法。

伺服器物件的屬性和方法
HttpServerUtility類的方法和屬性通過ASP.NET提供的內部伺服器物件公開。

下表提供了屬性的列表:

屬性 描述
MachineName 伺服器計算機的名稱
ScriptTimeOut 獲取和設定請求超時值,以秒為單位。

下表列出了一些重要的方法:

編號 方法 描述
1 CreateObject(String) 建立由其ProgID(程式設計ID)標識的COM物件的一個範例。
2 CreateObject(Type) 建立由其型別標識的COM物件的一個範例。
3 Equals(Object) 確定指定的物件(Object)是否等於當前的物件。
4 Execute(String) 在當前請求的上下文中執行指定虛擬路徑的處理程式。
5 Execute(String, Boolean) 在當前請求的上下文中執行指定虛擬路徑的處理程式,並指定是否清除QueryStringForm集合。
6 GetLastError 返回以前的異常。
7 GetType 獲取當前範例的型別。
8 HtmlEncode 將普通字串更改為具有合法HTML字元的字串。
9 HtmlDecode 將Html字串轉換為普通字串。
10 ToString 返回表示當前物件的字串。
11 Transfer(String) 對於當前請求,終止當前頁面的執行,並使用指定的頁面URL路徑開始執行新頁面。
12 UrlDecode 將URL字串轉換為普通字串。
13 UrlEncodeToken UrlEncode相同,但是在包含Base64編碼資料的位元組陣列上。
14 UrlDecodeToken UrlDecode相同,但在包含Base64編碼資料的位元組陣列上。
15 MapPath 返回與伺服器上指定的虛擬檔案路徑對應的物理路徑。
16 Transfer 將執行轉移到當前應用程式中的另一個網頁。

HttpRequest物件

HttpRequest物件是System.Web.HttpRequest類的一個範例。 它表示使頁面載入到瀏覽器中的HTTP請求的值和屬性。

這個物件提供的資訊被更高層次的抽象(Web控制模型)所包圍。 但是,此物件有助於檢查某些資訊,如用戶端瀏覽器和Cookie。

請求物件的屬性和方法

下表提供了Request物件的一些值得注意的屬性:

編號 屬性 描述
1 AcceptTypes 獲取用戶端支援的MIME接受型別的字串陣列。
2 ApplicationPath 獲取伺服器上的ASP.NET應用程式的虛擬應用程式根路徑。
3 Browser 獲取或設定有關請求用戶端的瀏覽器功能的資訊。
4 ContentEncoding 獲取或設定實體主體的字元集。
5 ContentLength 指定用戶端傳送的內容的長度(以位元組為單位)。
6 ContentType 獲取或設定傳入請求的MIME內容型別。
7 Cookies 獲取用戶端傳送的Cookie的集合。
8 FilePath 獲取當前請求的虛擬路徑。
9 Files 獲取用戶端上傳的檔案的集合,採用多部分MIME格式。
10 Form 獲取表單變數的集合。
11 Headers 獲取HTTP檔頭的集合。
12 HttpMethod 獲取用戶端使用的HTTP資料傳輸方法(如GETPOSTHEAD)。
13 InputStream 獲取傳入的HTTP實體主體的內容。
14 IsSecureConnection 獲取一個值,該值指示HTTP連線是否使用安全通訊端(即HTTPS)。
15 QueryString 獲取HTTP查詢字串變數的集合。
16 RawUrl 獲取當前請求的原始URL。
17 RequestType 獲取或設定用戶端使用的HTTP資料傳輸方法(GETPOST)。
18 ServerVariables 獲取Web伺服器變數的集合。
19 TotalBytes 獲取當前輸入流中的位元組數。
20 Url 獲取有關當前請求的URL的資訊。
21 UrlReferrer 獲取有關連結到當前URL的用戶端先前請求的URL的資訊。
22 UserAgent 獲取用戶端瀏覽器的原始使用者代理字串。
23 UserHostAddress 獲取遠端用戶端的IP主機地址。
24 UserHostName 獲取遠端用戶端的DNS名稱。
25 UserLanguages 獲取用戶端語言偏好設定的排序字串陣列。

下表列出了一些重要的方法:

編號 方法 描述
1 BinaryRead 對當前輸入流執行指定位元組數的二進位制讀取。
2 Equals(Object) 確定指定的物件是否等於當前物件。 (從object繼承。)
3 GetType 獲取當前範例的型別。
4 MapImageCoordinates 將傳入的影象欄位形式引數對映到適當的x坐標和y坐標值。
5 MapPath(String) 將指定的虛擬路徑對映到物理路徑。
6 SaveAs 將HTTP請求儲存到磁碟。
7 ToString 返回表示當前物件的字串。
8 ValidateInput 對通過CookiesFormQueryString屬性存取的集合進行驗證。

Response物件

Response物件表示伺服器對用戶端請求的響應。 它是System.Web.HttpResponse類的一個範例。

在ASP.NET中,響應物件在向用戶端傳送HTML文字時不起任何重要作用,因為伺服器端控制元件具有巢狀的,物件導向的方法來呈現自己。

但是,HttpResponse物件仍然提供了一些重要的功能,如Cookie功能和Redirect()方法。 Response.Redirect()方法允許將使用者轉移到另一個頁面。

Response物件的屬性和方法

下表提供了Response物件的一些值得注意的屬性:

編號 屬性 描述
1 Buffer 獲取或設定一個值,指示是否緩衝輸出並在完成響應完成處理後傳送。
2 BufferOutput 獲取或設定一個值,指示是否在完成頁面處理完成後快取輸出並行送。
3 Charset 獲取或設定輸出流的HTTP字元集。
4 ContentEncoding 獲取或設定輸出流的HTTP字元集。
5 ContentType 獲取或設定輸出流的HTTP MIME型別。
6 Cookies 獲取響應cookie集合。
7 Expires 獲取或設定在瀏覽器上快取的頁面到期之前的分鐘數。
8 ExpiresAbsolute 獲取或設定從快取中刪除快取資訊的絕對日期和時間。
9 HeaderEncoding 獲取或設定一個編碼物件,該物件表示當前標題輸出流的編碼。
10 Headers 獲取響應檔頭的集合。
11 IsClientConnected 獲取一個值,指示用戶端是否仍連線到伺服器。
12 Output 啟用將文字輸出到傳出的HTTP響應流。
13 OutputStream 啟用二進位制輸出到傳出HTTP內容主體。
14 RedirectLocation 獲取或設定Http Location檔頭的值。
15 Status 設定返回給用戶端的狀態行。
16 StatusCode 獲取或設定返回給用戶端的輸出的HTTP狀態碼。
17 StatusDescription 獲取或設定返回給用戶端的輸出的HTTP狀態字串。
18 SubStatusCode 獲取或設定一個限定響應狀態碼的值。
19 SuppressContent 獲取或設定一個值,指示是否向用戶端傳送HTTP內容。

下表列出了一些重要的方法:

編號 方法 描述
1 AddHeader 將HTTP檔頭新增到輸出流。提供AddHeader是為了與早期版本的ASP相容。
2 AppendCookie 基礎架構將HTTP cookie新增到內部cookie集合中。
3 AppendHeader 將HTTP檔頭新增到輸出流。
4 AppendToLog 將自定義紀錄檔資訊新增到InterNET資訊服務(IIS)紀錄檔檔案。
5 BinaryWrite 將一串二進位制字元寫入HTTP輸出流。
6 ClearContent 清除緩衝流中的所有內容輸出。
7 Close 關閉與用戶端的通訊端連線。
8 End 將所有當前緩衝的輸出傳送到用戶端,停止頁面的執行,並引發EndRequest事件。
9 Equals(Object) 確定指定的物件(Object)是否等於當前物件。
10 Flush 將所有當前緩衝的輸出傳送到用戶端。
11 GetType 獲取當前範例的型別。
12 Pics 將HTTP PICS-Label檔頭附加到輸出流。
13 Redirect(String) 將請求重定向到新的URL並指定新的URL。
14 Redirect(String, Boolean) 將用戶端重定向到新的URL。指定新的URL以及當前頁面的執行是否應該終止。
15 SetCookie 更新cookie集合中的現有cookie。
16 ToString 返回表示當前物件的字串。
17 TransmitFile(String) 將指定的檔案直接寫入HTTP響應輸出流,而不將其緩衝在記憶體中。
18 Write(Char) 將一個字元寫入HTTP響應輸出流。
19 Write(Object) 將物件寫入HTTP響應流。
20 Write(String) 將一個字串寫入HTTP響應輸出流。
21 WriteFile(String) 將指定檔案的內容直接寫入HTTP響應輸出流作為檔案塊。
22 WriteFile(String, Boolean) 將指定檔案的內容直接寫入HTTP響應輸出流作為記憶體塊。

範例

下面的簡單例子有一個文字框控制元件,使用者可以輸入名字,一個按鈕將資訊傳送到伺服器,一個標籤控制元件用於顯示用戶端的URL。

開啟Visual Studio,建立一個空的網站專案:ServerSide,參考下圖 -

在專案名稱上點選右鍵,並新增一個Web表單檔案(Defualt.aspx),參考下圖 -

其內容如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>伺服器端範例</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" Text="請輸入姓名:"></asp:Label>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
            <br />
            <br />
            <asp:Label ID="Label2" runat="server"></asp:Label>
        </div>
    </form>
</body>
</html>

開啟 Default.cs,新增Button1_Click事件處理的程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(TextBox1.Text))
        {

            // Access the HttpServerUtility methods through
            // the intrinsic Server object.
            Label1.Text = "歡迎您, " + Server.HtmlEncode(TextBox1.Text) + ". <br/> 當前 URL 是 " + Server.UrlEncode(Request.Url.ToString());
        }
    }

}

執行該專案(頁面),得到類似以下結果:

輸入一個名字:Yiibai,然後提交,得到以下結果 -