ASP.NET 3.5核心編程學習筆記(29):HttpServerUtility類

來源:互聯網
上載者:User

  ASP中Server對象的功能,在ASP.NET中由HttpServerUtility類來實現。該類型的執行個體在AS.NET開始處理請求時建立,之後被儲存在請求上下文中。HttpServerUtility擁有大量輔助方法,通過HttpContext對象的Server屬性暴露給模組或處理常式(包括global.asax、頁面和Web服務)。

HttpServerUtility類的屬性

  該類提供了兩個屬性:MachineName和ScriptTimeout。MachineName屬效能夠返回當前伺服器的電腦名稱。ScriptTimeout屬性擷取或設定處理請求佔用的最長時間(以秒為單位)。該屬性接受一個整數,預設值為90。若頁面在debug=true狀態下運行,該屬性會被設為趨於無窮大的值。

  在動態建立的代表頁面的類中,ScriptTimeout屬性會自動在其建構函式顯式的設定。

HttpServerUtility類的方法

  下表列出了HttpServerUtility類的所有方法:

  HTML和URL編碼針對的是字元,旨在確保被傳送的文本不會被接收它的瀏覽器錯誤識別。具體來講,HTML編碼會將<、>、&和引號分別替換成等價的HTML實體,如&lt;、&gt;、&amp;和&quot;。該過程還會對空白、標點符號及HTML流中不允許出現的其他字元進行編碼。而URL編碼指在修正通過URL字串進行傳輸的文本。在URL編碼時,特殊字元也會被其他執行個體取代,但這些實體與HTML編碼所使用的不同。

  自ASP.NET 2.0開始,該類又增添了兩個靜態方法,分別用於對token進行編碼和解碼。UrlTokenEncode方法接受包含Base64資料的位元組數組,能夠將其轉化為URL方式的編碼的標記。UrlTokenDecode能夠執行反向轉換過程。

嵌入其他頁面的結果

  Execute方法允許我們將外部頁面作為子程式執行。當執行到Server.Execute後,控制權會被傳給指定的頁面。當前頁面的執行會被掛起,轉而啟用外部頁面。子頁面產生的響應文本會被捕獲,並根據所使用的Execute重載方法進行處理。下表列出了Execute方法的重載方法:

  如果指定了TextWriter,那麼子頁面的響應文本會緩衝在該編寫器對象中,這樣可以自由管理首頁面的輸出。下例展示了這種效果--首頁面產生文本為粗體,而子頁面的輸出為普通字型,夾在首頁面的兩行輸出之間。

void Page_Load(object sender, EventArgs e)
{
StringBuilder builder = new StringBuilder();
builder.Append("<b>Response generated before Execute is called</b><hr/>");

StringWriter writer = new StringWriter();
Server.Execute("child.aspx", writer);
builder.Append(writer.ToString());

builder.Append("<hr/><b>Response generated after the call to Execute.<b>");

Label1.Text = builder.ToString();
}

  Execute方法的內部實現頗為有趣。首頁面和子頁面由同一個HttpApplication對象運行,好像它們處理的是同一個請求。Execute的工作原理是一種環境切換。首先,該方法會從應用程式工廠擷取一個HTTP處理常式,以便為新請求服務。主請求的原始處理常式會被緩衝,新的處理常式會取代它。子頁面繼承其父頁面的上下文,執行完畢後,會Session和Application的任何更改會立即對首頁面生效。

  由於處理常式的切換不需要建立處理請求的新對象,因而整個操作極為高效。當子頁面返回後,原始的處理常式會被恢複。首頁面的執行會從其暫停位置繼續執行,但使用的上下文是繼承於子頁面的。

  ASP.NET會直接調用Execute方法指示的處理常式,而不會應用任何身分識別驗證與制空權邏輯。如果您的安全性原則要求用戶端擁有訪問該資源的許可權,那麼應用程式應重新進行授權。我們可用Response.Redirect來替代Execute,從而強制進行重新授權。若Redirect被調用,瀏覽器會向系統發出新的請求,這通常由IIS和ASP.NET進行身分識別驗證和授權。另一種方法是通過定義角色並在應用程式調用Execute方法前檢查使用者角色,以此來驗證使用者是否有許可權調用子頁面。

伺服器端重新導向

  Transfer方法與Execute方法的區別在於,Transfer方法在執行完指定頁面後,會終止主調頁面的執行。新頁面的執行效果如果最初請求的頁面。Transfer方法有以下3個重載方法:

public void Transfer(string);
public void Transfer(string, bool);
public void Transfer(IHttpHandler, bool);

  string類型的參數用於指定目標URL。bool型別參數用於指定QueryString和Form的處理方式--如果為true,這兩個集合會被保留,否則都被清除。IHttpHandler型別參數可直接指定要調用的HTTP處理常式。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.