鍍金池/ 教程/ C#/ 服務(wù)器端
調(diào)試
管理狀態(tài)
Panel 控件
Web 服務(wù)
語言集成查詢
數(shù)據(jù)源
基礎(chǔ)控件
廣告輪轉(zhuǎn)器
服務(wù)器端
服務(wù)器控件
ADO.NET
多線程
HTML 服務(wù)器
生命周期
Ajax 控制
客戶端
異常處理
環(huán)境設(shè)置
部署
個性化
驗(yàn)證器
多視圖
日歷
文件上傳
ASP.NET - 數(shù)據(jù)綁定
數(shù)據(jù)庫存取
實(shí)例
自定義控件
簡介
配置
數(shù)據(jù)緩存
安全性
指令
事件處理

服務(wù)器端

我們已經(jīng)研究了頁面生命周期和一個頁面如何包含不同的控件。頁面本身作為一個控制對象被實(shí)例化。所有的 web 表單基本上是 ASP.NET 頁面類的實(shí)例。頁面類有以下極其有用的屬性,與內(nèi)部對象所對應(yīng):

  • 會話
  • 應(yīng)用程序
  • 緩存
  • 請求
  • 響應(yīng)
  • 服務(wù)器
  • 用戶
  • 跟蹤

我們會在適當(dāng)?shù)臅r間里討論每一個對象。在本教程中我們將會探索 Server 對象,Request 對象和 Response 對象。

Server 對象

ASP.NET 中的服務(wù)器對象是 System.Web.HttpServerUtility 類的一個實(shí)例。The HttpServerUtility 類提供了大量的屬性和方法來執(zhí)行不同的工作。

Server 對象的屬性和方法

HttpServerUtility 類的方法和屬性通過由 ASP.NET 提供的內(nèi)部服務(wù)器對象公開的。

以下表格提供了 HttpServerUtility 類一系列的屬性。

屬性 描述
MachineName 服務(wù)器電腦的名稱
ScriptTimeOut 以秒為單位獲取和設(shè)置請求超時的值

以下表格提供了一些重要的方法:

方法 描述
CreateObject(String) 創(chuàng)建一個 COM 對象的實(shí)例,由其 ProgID 驗(yàn)證。
CreateObject(Type) 創(chuàng)建一個 COM 對象的實(shí)例,由其 Type 驗(yàn)證。
Equals(Object) 決定具體的對象是否和現(xiàn)有對象一致。
Execute(String) 在當(dāng)前請求的上下文中執(zhí)行處理應(yīng)用程序指定的虛擬路徑。
Execute(String, Boolean) 在當(dāng)前請求的上下文中執(zhí)行處理程序指定的虛擬路徑,指定是否清除 QueryString 及表單集合。
GetLastError 返回之前的異常。
GetType 獲取現(xiàn)有實(shí)例的類型。
HtmlEncode 將一個普通的字符串變成合法的 HTML 字符串。
HtmlDecode 將一個 Html 字符串轉(zhuǎn)化成一個普通的字符串。
ToString 返回一個表示當(dāng)前對象的字符串。
Transfer(String) 對于當(dāng)前請求,終止當(dāng)前頁面的執(zhí)行并通過指定頁面的 URL 路徑,開始執(zhí)行一個新頁面。
UrlDecode 將一個 URL 字符串轉(zhuǎn)化成一個普通的字符串。
UrlEncodeToken 與 UrlEncode 作用相同,但是在一個字節(jié)數(shù)組中,包含以 Base64 編碼的數(shù)據(jù)。
UrlDecodeToken 與 UrlDecode 工作相同,但是在一個字節(jié)數(shù)組中,包含以 Base64 編碼的數(shù)據(jù)。
MapPath 返回與指定的虛擬服務(wù)器上的文件路徑相對應(yīng)的物理路徑。
Transfer 在當(dāng)前應(yīng)用程序上轉(zhuǎn)移執(zhí)行到另一個 web 頁面。

Request 對象

請求對象是 System.Web.HttpRequest 類的一個實(shí)例。它代表了 HTTP 請求的值和屬性,使頁面加載到瀏覽器中。

此對象所呈現(xiàn)的信息被封裝在更高級別的抽象中(web 控件模型)。然而,這個對象可以幫助檢查一些信息,例如客戶端瀏覽器和信息記錄程序。

Request 對象的屬性和方法

下表提供了請求對象一些值得注意的屬性:

屬性 描述
AcceptTypes 獲取一個用戶支持的 MIME 接受類型的字符串?dāng)?shù)組。
ApplicationPath 在服務(wù)器上獲取 ASP.NET 應(yīng)用程序的真實(shí)應(yīng)用程序根路徑。
Browser 獲取或設(shè)置關(guān)于請求用戶瀏覽器能力的信息。
ContentEncoding 獲取或設(shè)置字符集的實(shí)體。
ContentLength 指定由客戶端發(fā)送的內(nèi)容的長度以字節(jié)為單位。
ContentType 獲取或設(shè)置傳入請求的 MIME 內(nèi)容類型。
Cookies 獲取客戶端發(fā)送的 cookies 集合。
FilePath 獲取當(dāng)前請求的真實(shí)路徑。
Files 以多部分的 MIME 格式獲取客戶端上傳文件的集合。
Form 獲取表單變量的集合。
Headers 獲取 HTTP 標(biāo)題的集合。
HttpMethod 獲取用戶使用的 HTTP 數(shù)據(jù)轉(zhuǎn)移方法(如 GET,POST,或者 HEAD)
InputStream 獲取傳入的 HTTP 的實(shí)體內(nèi)容。
IsSecureConnection 獲取一個值,該值指示 HTTP 連接是否使用安全套接字(即HTTPS)。
QueryString 獲取 HTTP 詢問字符串變量的集合。
RawUrl 獲取當(dāng)前請求的原始 URL。
RequestType 獲取或設(shè)置由用戶使用的 HTTP 數(shù)據(jù)轉(zhuǎn)移方法(GET 或者 POST)。
ServerVariables 獲取 Web 服務(wù)器變量的集合。
TotalBytes 獲取現(xiàn)有輸入流的字節(jié)數(shù)。
Url 獲取關(guān)于現(xiàn)有請求的 URL 的信息。
UrlReferrer 獲取關(guān)于與現(xiàn)有 URL 相鏈接的客戶端之前的請求的 URL 信息。
UserAgent 獲取客戶端瀏覽器的原始用戶代理字符串。
UserHostAddress 獲取遠(yuǎn)程客戶機(jī)的 IP 主機(jī)地址。
UserHostName 獲取遠(yuǎn)程客戶機(jī)的 DNS 名稱。
UserLanguages 獲取客戶端語言首選項(xiàng)的排序字符串?dāng)?shù)組。

下表提供了一些重要的方法:

方法 描述
BinaryRead 從當(dāng)前的輸入流中執(zhí)行一個指定字節(jié)數(shù)的二進(jìn)制讀數(shù)。
Equals(Object) 決定指定對象是否等同于現(xiàn)有對象。(繼承自對象)
GetType 獲取現(xiàn)有實(shí)例的類型。
MapImageCoordinates 將傳入的象場表單參數(shù)繪制成適當(dāng)?shù)?x 坐標(biāo)和 y 坐標(biāo)值。
MapPath(String) 將指定的真實(shí)路徑繪制成一個物理路徑。
SaveAs 在硬盤中存為一個 HTTP 請求。
ToString 返回一個代表現(xiàn)有對象的字符串。
ValidateInput 導(dǎo)致驗(yàn)證發(fā)生,通過訪問 Cookies,F(xiàn)orm,QueryString 屬性的集合。

Response 對象

響應(yīng)對象代表了服務(wù)器對于用戶請求的響應(yīng)。它是 System.Web.HttpResponse 類的一個實(shí)例。

在 ASP.NET 中,響應(yīng)對象在給用戶發(fā)送 HTML 文本的過程中不扮演任何重要的角色,因?yàn)榉?wù)器端控件有嵌套的、面向?qū)ο蟮姆椒▉碜晕页尸F(xiàn)。

然而,HttpResponse 對象提供了一些重要的功能,比如 cookie 特點(diǎn)和 Redirect() 方法。 Response.Redirect() 方法允許將用戶轉(zhuǎn)移到另一個頁面,在應(yīng)用程序內(nèi)部或應(yīng)用程序外部均可。它需要一個往返過程。

Response 對象的屬性和方法

下表提供了一些響應(yīng)對象值得注意的屬性:

屬性 描述
Buffer 獲取或設(shè)置一個值,表明是否緩沖輸出,并在完整的響應(yīng)程序結(jié)束后將其發(fā)送。
BufferOutput 獲取或設(shè)置一個值,表名是否緩沖輸出,并在完整頁面結(jié)束進(jìn)城后將其發(fā)送。
Charset 獲取或設(shè)置輸出流的 HTTP 字符集。
ContentEncoding 獲取或設(shè)置輸出流的 HTTP 字符集。
ContentType 獲取或設(shè)置輸出流的 HTTP MIME 類型。
Cookies 獲取相應(yīng) cookie 集合。
Expires 獲取或設(shè)置一個瀏覽器上緩存的頁面在到期前的分鐘數(shù)。
ExpiresAbsolute 獲取或設(shè)置從緩存中移除緩存信息的絕對日期和時間。
HeaderEncoding 獲取或設(shè)置一個編碼對象,代表現(xiàn)有標(biāo)題輸出流的編碼。
Headers 獲取響應(yīng)標(biāo)題的集合。
IsClientConnected 獲取一個值,表明用戶是否仍和服務(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è)置一個值限制響應(yīng)的狀態(tài)碼。
SuppressContent 獲取或設(shè)置一個值,表明是否發(fā)送 HTTP 內(nèi)容到客戶端。

下表提供了一些重要的方法:

方法 描述
AddHeader 給輸出流添加一個 HTTP 標(biāo)題。提供 AddHeader 是為了 ASP 早期版本的兼容性。
AppendCookie 基礎(chǔ)設(shè)施為內(nèi)部 cookie 集合添加一個 HTTP cookie。
AppendHeader 給輸出流添加一個 HTTP 標(biāo)題。
AppendToLog 將自定義日志信息添加到 InterNET 信息服務(wù)(IIS)日志文件。
BinaryWrite 將一串二進(jìn)制字符寫入 HTTP 輸出流。
ClearContent 清除緩沖流中的所有內(nèi)容輸出。
Close 關(guān)閉客戶端套接字。
End 發(fā)送所有現(xiàn)有的緩沖輸出給客戶端,停止頁面執(zhí)行,并且引發(fā) EndRequest 事件。
Equals(Object) 確定指定對象是否等同于現(xiàn)有對象。
Flush 發(fā)送所有現(xiàn)有緩沖輸出到客戶端。
GetType 獲取現(xiàn)有實(shí)例的類型。
Pics 將一個 HTTP PICS-Label 標(biāo)題附加到輸出流。
Redirect(String) 將請求重定向到一個新的 URL 并指定新的 URL。
Redirect(String, Boolean) 將客戶端重定向到一個新的 URL。指定新的 URL 并且之指定現(xiàn)有頁面是否應(yīng)該終止。
SetCookie 在 cookie 集合中更新現(xiàn)存 cookie。
ToString 返回代表現(xiàn)有對象的一個字符串
TransmitFile(String) 直接編寫指定的文件到一個 HTTP 響應(yīng)輸出流中,不需要在內(nèi)存中緩沖。
Write(Char) 編寫一個字符到一個 HTTP 響應(yīng)輸出流中。
Write(Object) 編寫一個對象到一個 HTTP 響應(yīng)流中。
Write(String) 編寫一個字符串到一個 HTTP 響應(yīng)輸出流中。
WriteFile(String) 直接編寫指定文件的內(nèi)容到一個 HTTP 響應(yīng)輸出流中,作為一個文件塊。
WriteFile(String, Boolean) 直接編寫指定文件的內(nèi)容到一個 HTTP 響應(yīng)輸出流中,作為一個內(nèi)存塊。

示例

以下簡單的例子有一個文本框控件,用戶可以輸入名稱,一個按鈕可以發(fā)送信息到服務(wù)器,還有一個標(biāo)簽控件來顯示客戶端計(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)行頁面查看以下結(jié)果:

http://wiki.jikexueyuan.com/project/asp-net/images/asp.net_server_side.jpg" alt="image" />

上一篇:事件處理下一篇:自定義控件