在Asp.net WebForm中,Server對象是HttpServerUtility類的實例。看下圖:
而在Asp.net MVC中,Server對象是HttpServerUtilityBase對象。
來看下HttpServerUtility類提供的功能。順便以一個ashx頁面來展示一下該類的作用。
一、屬性
MachineName 獲取服務器的計算機名稱。
ScriptTimeout 獲取和設置請求超時值(以秒計)。
public void ProcessRequest(HttpContext context) { context.Response.Write(context.Server.MachineName); //輸出 KISSDODOG-PC 獲取計算機名 context.Response.Write(context.Server.ScriptTimeout); //輸出 110 }
二、方法
ClearError 清除前一個異常。
CreateObject 已重載。 創建 COM 對象的一個服務器實例。
CreateObjectFromClsid 創建 COM 對象的服務器實例,該對象由對象的類標識符 (CLSID) 標識。
Execute 已重載。 在當前請求的上下文中執行指定資源的處理程序,然后將執行返回給調用它的頁。
GetLastError 返回前一個異常。
HtmlDecode 已重載。 對已被編碼以消除無效 HTML 字符的字符串進行解碼。
HtmlEncode 已重載。 對要在瀏覽器中顯示的字符串進行編碼。
MapPath 返回與 Web 服務器上的指定虛擬路徑相對應的物理文件路徑。 該方法經常使用。將虛擬路徑轉換為服務器物理路徑。
Transfer 已重載。 終止當前頁的執行,並為當前請求開始執行新頁。
TransferRequest 已重載。 異步執行指定的 URL。
UrlDecode 已重載。 對字符串進行解碼,該字符串針對 HTTP 傳輸進行了編碼並在 URL 中發送到服務器。
UrlEncode 已重載。 編碼字符串,以便通過 URL 從 Web 服務器到客戶端進行可靠的 HTTP 傳輸。
UrlPathEncode 對 URL 字符串的路徑部分進行 URL 編碼並返回編碼后的字符串。
UrlTokenDecode 將 URL 字符串標記解碼為使用 64 進制數字的等效字節數組。
UrlTokenEncode 將一個字節數組編碼為使用 Base 64 編碼方案的等效字符串表示形式,Base 64 是一種適於通過 URL 傳輸數據的編碼方案。
context.Response.Write(context.Server.MapPath("/")); //輸出 C:\Users\Administrator\Desktop\WebApplication1\WebApplication1\ //該方法經常用,將虛擬路徑轉換為物理路徑 context.Response.Write("<div style='background-color:red'>HtmlEncode測試</div>"); //如果不編碼,默認就是會被瀏覽器解析的 context.Response.Write(context.Server.HtmlEncode("<div style='background-color:red'>HtmlEncode測試</div>")); //經過編碼之后 原樣輸出
效果如下:
我們將那段經過HTML編碼之后的字符解碼之后再進行輸出查看效果。
string str = "<div style='background-color:red'>HtmlEncode測試</div>"; context.Response.Write(context.Server.HtmlDecode(str));
效果如下
從效果中我們看出,經過編碼之后效果又變回被瀏覽器解析的了。
下面來看看Excute方法:
test.ashx頁面:
public void ProcessRequest(HttpContext context) { context.Response.Write("我是第一個text.ashx處理結果"); context.Response.Write("<br/>"); context.Server.Execute("/Default.aspx"); context.Response.Write("我是第二個text.ashx處理結果"); }
Default.aspx頁面代碼:
protected void Page_Load(object sender, EventArgs e) { Response.Write("我是Default.aspx處理的輸出!"); }
效果:
很明顯可以看到,Excute可以將請求再給另外一個處理程序,用於再次處理頁面,當請求完畢后會返回到本頁面繼續執行,請求上下文,包括表單數據,URL信息都都會傳送過去。Server.Execute方法允許當前的ASPX頁面執行一個同一Web服務器上的指定ASPX頁面,當指定的ASPX頁面執行完畢,控制流程重新返回原頁面發出Server.Execute調用的位置。
Server.Transfer與Response.Redirect方法類似,只是Response.Redirect的作用相似,不同之處在於,Response.Redirect是客戶端發送請求到服務器,服務器執行Response.Redirect之后,返回302,瀏覽器接收到請求后,再次發送一次請求到要跳轉的URL,而Server.Transfer的跳轉完全是在服務器端,瀏覽器根本不知道已經跳轉了,因此路徑顯示的仍然是原路徑。
在網絡狀態較好的情況下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服務器上的aspx或非aspx(html)資源
Server.Transfer方法和Server.Execute方法最靈活!! 但只能轉到同一Application目錄下,也有可能導致不期望的結果發生
Server.Execute方法占用資源最多.
text.ashx代碼:
public void ProcessRequest(HttpContext context) { context.Server.Transfer("/Default.aspx"); }
Default.aspx代碼:
protected void Page_Load(object sender, EventArgs e) { Response.Write("我是Default.aspx處理的輸出!"); }
效果:
test.ashx頁面代碼:
public void ProcessRequest(HttpContext context) { string url = "http://www.xxx.com/username=zhangsan&Age="; context.Response.Write(context.Server.UrlEncode(url)); //URL路徑編碼 context.Response.Write("<br/>"); string encodeurl = "http%3a%2f%2fwww.xxx.com%2fusername%3dzhangsan%26Age%3d"; context.Response.Write(context.Server.UrlDecode(encodeurl)); }
顯示效果: