ASP.NET 服務(wù)器端

2022-06-27 15:37 更新

服務(wù)器端

我們已經(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ì)話
  • 應(yīng)用程序
  • 緩存
  • 請(qǐng)求
  • 響應(yīng)
  • 服務(wù)器
  • 用戶
  • 跟蹤

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

Server 對(duì)象

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

Server 對(duì)象的屬性和方法

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è)面。

Request 對(duì)象

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

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

Request 對(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 屬性的集合。

Response 對(duì)象

響應(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ò)程。

Response 對(duì)象的屬性和方法

下表提供了一些響應(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é)果:

image

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)