iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
Modern Web

ASP.NET Web Form 入門30天系列 第 20

[ASP.NET] 網頁常用物件-初淺談Server物件

  • 分享至 

  • xImage
  •  

本篇擷取重點:

  1. Server物件
  2. Server物件的常用屬性及方法

一、Server物件

Server物件是 ASP 的內建物件之一,用於提供【ASP.NET】取得伺服器提供的各項資訊,包含對伺服器上的方法和屬性的訪問以及進行HTML編碼的功能。這些功能分別由Server物件相應的方法和屬性完成。

參考資料:
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/258333/


二、Server物件的常用屬性及方法

  1. 常用屬性
屬性 說明
MachineName 查詢伺服器名稱。
ScriptTimeout 設定指令碼程式執行的時間上限(單位S(秒)),預設時間為90秒,若設為0則將無限等待。

==================================================================
範例實作:

Response.Write(".MachineName屬性:");
Response.Write("伺服器機器名:" + Server.MachineName);
Response.Write("<br>.ScriptTimeout屬性:");
Response.Write("超時時間為:" + Server.ScriptTimeout);

頁面顯示:

https://ithelp.ithome.com.tw/upload/images/20190921/20120056gEncNm0x9i.jpg

==================================================================


  1. 常用方法
方法 說明
MapPath() 傳回對應至指定虛擬路徑的實體檔案路徑。
URLEncode() 將網址字串轉換為URL編碼,(預設)。
URLDecode() 將URL編碼轉換為字串。
HTMLEncode() 是對特殊字元進行編碼 ,避免將特殊字元的組合視為HTML的標籤, 所以事先進行編碼 ,直到瀏覽器後再對它們進行解碼 ,EX:編碼為“<B&gt>” 。
HTMLDecode() 為預設,若特殊字元的組合符合HTML的標籤,將其視為HTML標籤。
Transfer() 在伺服器上執行頁面轉向(須在同根目錄下),並保留瀏覽器端的 URL 地址 ,伺服器停止解析本頁,儲存轉向前的資料後,轉向至新頁面 ,後將轉向前儲存的資料加上新頁面的結果返回給瀏覽器。

==================================================================
範例實作:

Server.MapPath()

Response.Write("根目錄的實際路徑為:" + Server.MapPath("/"));//根目錄的實體檔案路徑

頁面顯示:
https://ithelp.ithome.com.tw/upload/images/20190922/20120056R3RmcICg72.jpg


Server.UrlEncode()(預設)、Server.UrlDecode()

你是否曾在瀏覽網頁時,看過在網址欄內竟然包含中文、日文、甚至其他國家的文字字元,但當你將該網址複製並重新貼上後會發現,原本的其他國家文字字元被轉成一段由英文數字及符號組成的編碼,這就是URL編碼,(預設為UrlEncode)。

https://ithelp.ithome.com.tw/upload/images/20190922/20120056BBgBxpttMr.jpg

再讓我們實驗看看,

Response.Write(" <br />Server.UrlEncode下的熱門:" + Server.UrlEncode("熱門"));
Response.Write(" <br />Server.UrlDecode下的熱門:" + Server.UrlDecode("熱門"));

頁面顯示:
https://ithelp.ithome.com.tw/upload/images/20190922/20120056BOGOE2nMke.jpg


Server.HTMLDecode()(預設)、Server.HTMLEncode()

是否對特殊字元進行編碼,避免將特殊字元的組合視為HTML的標籤,所以事先進行編碼 ,直到瀏覽器後再對它們進行解碼 ,EX: < B > 編碼為" & l t ; b & g t ;" 。

Response.Write("<br />HTMLDecode方法下:<b>粗體字</b>"); //未對特殊字元進行編碼,故將(<b></b>)視為HTML的標籤。
Response.Write("<br />HTMLEncode方法下:" + Server.HtmlEncode("<b>粗體字</b>")); //已對特殊字元進行事先編碼,故能將(<b></b>)於頁面顯示。

頁面顯示:
https://ithelp.ithome.com.tw/upload/images/20190922/20120056eJzdBGtqDh.jpg


Server.Transfer(),在下一篇與Server.Execute()/Response.Redirect()一起進行比較

==================================================================


此篇內容整理自多篇網路文章、PPT及自己的理解,但筆者也仍處在初階的學習過程,對程式概念的理解及判斷都尚不足,若有錯誤的地方,也煩請各位大大提點,先謝謝大家惹!!


明日(9/22)預定探討課題:

  • 頁面跳轉(Server.Transfer()/Server.Execute()/Response.Redirect())

後日(9/23)預定探討課題:

  • 網頁暫存(Application、Session、Cookie、Page.Cache)

上一篇
[ASP.NET] 網頁常用物件-初淺談Response物件
下一篇
[ASP.NET] 網頁常用物件-網頁跳轉的比較及實際範例說明
系列文
ASP.NET Web Form 入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
小朱
iT邦新手 4 級 ‧ 2019-09-22 20:39:46

Server是ASP時代的五大物件,為了讓ASP的程式員轉到ASP.NET不會不習慣才留下來的,不過這裡有個觀念要修正一下,Server是給"ASP.NET程式"取得伺服器端資訊,而不是給"使用者",基本上前端介面不太可能會需要用到Server的東西,就算是要用也要小心,因為Server是取得伺服器的一些重要訊息 (如主機名稱、IP之類的),不慎的使用會給駭客收集資訊的機會,增加被攻擊的可能風險。

有些方法也建議是改用 .NET Framework 本身提供的方法,Server的方法也只是保留方法相容性。

  1. Server.MapPath() => HostingEnvironment.MapPath()
  2. Server.HTMLEncode()/HTMLDecode() => HttpUtility.HtmlEncode()/HtmlDecode()
  3. Server.URLEncode()/URLDecode() => HttpUtility.UrlEncode()/UrlDecode()

不過 Server 倒是有一個好用的方法:GetLastError(),可用來取得最後一次的例外,可做預先的錯誤處理。

謝謝朱大,您的意思是不是說,SERVER物件只是過渡期延續ASP時代的產物,在實務上,並不太會使用SERVER物件,反而會建議改用上述的.NET Framework本身提供的方法來取代!!

小朱 iT邦新手 4 級 ‧ 2019-09-23 12:13:31 檢舉

基本上現在多數的 Server 方法都是轉呼叫 .NET Framework 內相對應的物件和方法,當然也可以維持用 Server 物件操作,這是為了既有程式和操作的相容性。

了解,謝謝朱大

我要留言

立即登入留言