ASP.NET 服務(wù)器端

2022-06-27 15:37 更新

服務(wù)器端

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

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

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

Server 對象

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

Server 對象的屬性和方法

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

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

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

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

方法描述
CreateObject(String)創(chuàng)建一個 COM 對象的實例,由其 ProgID 驗證。
CreateObject(Type)創(chuàng)建一個 COM 對象的實例,由其 Type 驗證。
Equals(Object)決定具體的對象是否和現(xiàn)有對象一致。
Execute(String)在當(dāng)前請求的上下文中執(zhí)行處理應(yīng)用程序指定的虛擬路徑。
Execute(String, Boolean)在當(dāng)前請求的上下文中執(zhí)行處理程序指定的虛擬路徑,指定是否清除 QueryString 及表單集合。
GetLastError返回之前的異常。
GetType獲取現(xiàn)有實例的類型。
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 類的一個實例。它代表了 HTTP 請求的值和屬性,使頁面加載到瀏覽器中。

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

Request 對象的屬性和方法

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

屬性描述
AcceptTypes獲取一個用戶支持的 MIME 接受類型的字符串?dāng)?shù)組。
ApplicationPath在服務(wù)器上獲取 ASP.NET 應(yīng)用程序的真實應(yīng)用程序根路徑。
Browser獲取或設(shè)置關(guān)于請求用戶瀏覽器能力的信息。
ContentEncoding獲取或設(shè)置字符集的實體。
ContentLength指定由客戶端發(fā)送的內(nèi)容的長度以字節(jié)為單位。
ContentType獲取或設(shè)置傳入請求的 MIME 內(nèi)容類型。
Cookies獲取客戶端發(fā)送的 cookies 集合。
FilePath獲取當(dāng)前請求的真實路徑。
Files以多部分的 MIME 格式獲取客戶端上傳文件的集合。
Form獲取表單變量的集合。
Headers獲取 HTTP 標(biāo)題的集合。
HttpMethod獲取用戶使用的 HTTP 數(shù)據(jù)轉(zhuǎn)移方法(如 GET,POST,或者 HEAD)
InputStream獲取傳入的 HTTP 的實體內(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獲取遠程客戶機的 IP 主機地址。
UserHostName獲取遠程客戶機的 DNS 名稱。
UserLanguages獲取客戶端語言首選項的排序字符串?dāng)?shù)組。

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

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

Response 對象

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

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

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

Response 對象的屬性和方法

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

屬性描述
Buffer獲取或設(shè)置一個值,表明是否緩沖輸出,并在完整的響應(yīng)程序結(jié)束后將其發(fā)送。
BufferOutput獲取或設(shè)置一個值,表名是否緩沖輸出,并在完整頁面結(jié)束進城后將其發(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使二進制輸出到輸出的 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將一串二進制字符寫入 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)有實例的類型。
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)簽控件來顯示客戶端計算機的 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 點擊后的代碼:

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())
   }
}

運行頁面查看以下結(jié)果:

image

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號