ASP.NET/Request

維基教科書,自由的教學讀本

用戶在client使用Web瀏覽器向Web應用程式發出請求時,會將client信息發給server。server收到一個HTTP請求,包括了全部查詢字符串參數或表單參數、Cookie數據以及瀏覽器信息。在asp.net中執行時把這些請求信息封裝成Request對象。

Request對象最常用的是Form和QueryString集合。

主要屬性[編輯]

Request對象的主要屬性
屬性名字 解釋
ApplicationPath 獲取伺服器上asp.net應用程式的虛擬應用程式根路徑
Browser 獲取有關正在請求的客戶端的瀏覽器功能的信息
ContentEncoding 獲取或設置實體主體的字符集。該屬性值為表示客戶端的字符集Encoding對象
ContentLength 指定客戶端發送的內容長度,以字節為單位
ContentType 獲取或設置傳入請求的MIME內容類型
Cookies 獲取客戶端發送的Cookie集合
CurrentExecutionFilePath 獲取當前請求的虛擬路徑
FilePath 獲取當前請求的虛擬路徑
Files 獲取客戶端上載的文件集合
Form 獲取窗體變量集合
HttpMethod 獲取客戶端使用的HTTP數據傳輸方法(如:get、post或head)
Item 獲取Cookies、Form、QueryString或ServerVariables集合中指定的對象
Params 獲取Cookies、Form、QueryString或ServerVariables項的組合集合
Path 獲取當前請求的虛擬路徑
PathInfo 獲取具有URL擴展名的資源的附加路徑信息
PhysicalApplicationPath 獲取當前正在執行的伺服器應用程式的根目錄的物理文件系統路徑
PhysicalPath 獲取與請求的URL相對應的物理文件路徑
QueryString 獲取HTTP查詢字符串變量集合
RequestType 獲取或設置客戶端使用HTTP數據傳輸的方式(get或post)
ServerVariables 獲取Web伺服器變量的集合
TotalBytes 獲取當前輸入流的字節數
Url 獲取有關當前請求URL的信息
UserHostAddress 獲取遠程客戶端的IP主機地址

主要方法[編輯]

(1)MapPath(VirtualPath):將當前請求的URL中的虛擬路徑virtualPath映射到伺服器上的物理路徑。參數virtualPath指定當前請求的虛擬路徑,可以是絕對路徑或相對路徑。該方法的返回值為由virtualPath指定的伺服器物理路徑。

(2)SaveAs (Filename,includeHeaders):將http請求保存到磁碟。參數filename指定物理驅動器路徑,includeHeaders是一個布爾值,指定是否應將HTTP標頭保存到磁碟。

常用路徑(path)獲取方法[編輯]

假設網址為http://localhost:1897/ News/Press/Content.aspx?id=1019

標題文本
跟 Browser Request 的網址相關的屬性與方法 輸出(output)實例 備註
Request.ApplicationPath / 指的是當前的application(應用程式)的目錄
Request.PhysicalPath D:\Projects\Solution\web\News\Press\Content.aspx 磁碟驅動器代號:\父目錄\子目錄\Content.aspx
Request.PhysicalApplicationPath D:\Projects\Solution\web\ 磁碟驅動器代號:\父目錄\子目錄\
Request.CurrentExecutionFilePath /News/Press/Content.aspx
Request.FilePath /News/Press/Content.aspx 對應於iis的虛擬目錄。
Request.Path /News/Press/Content.aspx 當前請求的虛擬路徑。Path 是 FilePath 和 PathInfo 尾部的串聯。*(見下面詳細講解)
Server.MapPath(string url) 例http://www.example.com/1/index.html, 假設你的應用程式在c:/iis/MySite中,那麼就是c:/iis/MySite/1/index.html 將url映射為伺服器上的物理路徑
Request.RawUrl /News/Press/Content.aspx?id=1019
Request.Url.AbsolutePath /News/Press /Content.aspx
Request.Url.AbsoluteUri http://localhost:1897/Content.aspx?id=1019
Request.Url.LocalPath /News/Press//Content.aspx
Request.Url.PathAndQuery /News/Press//Content.aspx?id=1019&uu=77
Request.Url.Scheme http
Request.Url.Host localhost
Request.Url.Port 1987
Request.Url.Authority localhost:1897
Request.Url.Query ?id=1019
Request.Url.Query[id] 1019
Request.Url.Fragments /
News/
Press/
Content.aspx
Request.Url.Segments[0] /
System.IO.Path.GetDirectoryName(Request.PhysicalPath) D:\Projects\Solution\web\News\Press 磁碟驅動器代號:\父目錄\子目錄\
System.IO.Path.GetFileName(Request.PhysicalPath) Content.aspx

如果請求的地址為http://www.cnblogs.com/default.aspx/books 則:

如果請求地址為http://www.cnblogs.com/defaut.aspx?id=1&name=kk則

讀取窗體變量四種方式[編輯]

使用Request.Form屬性讀取窗體變量[編輯]

HtmlForm控制項的Method屬性的默認值為post。在這種情況下,當用戶提交網頁時,表單數據將以HTTP標頭的形式發送到伺服器端。此時,可以使用Request對象的Form屬性來讀取窗體變量。如:txtUserName和txtPassword的文本框控制項,則可以通過以下形式來讀取它們的值: Request.Form["txtUserName"] ;Request.Form["txtPassword"]

使用Request.QueryString屬性讀取窗體變量[編輯]

如果將HtmlForm控制項的Method屬性設置為get,則當用戶提交網頁時,表單數據將附加在網址後面發送到伺服器端。在這種情況下,可以使用Request對象的QueryString屬性讀取窗體變量。Request.QueryString["txtUserName"] ;Request.QueryString["txtPassword"]

使用Request.Params屬性讀取窗體變量[編輯]

不論HtmlForm控制項的Method屬性取什麼值,都可以使用Request對象的Params屬性來讀取窗體變量的內容,如Request.Params["txtPassword"]或者Request.["txtPassword"],優先獲取GET方式提交的數據,它會在QueryString、Form、ServerVariable中都按先後順序搜尋一遍。

通過伺服器控制項的屬性直接讀取窗體變量[編輯]

除了以上3種方式之外,也可以通過伺服器控制項的屬性來直接讀取窗體變量,這是獲取表單數據的最常用、最簡單的方式。例如: txtUserName.Text

Request.ServerVariables集合中獲取到的相關信息[編輯]

Request.ServerVariables是一個很強大的工具,可以幫助我們獲取很多client和web宿主的信息,有興趣的朋友可以通過以下代碼看看它到底包含什麼信息

       foreach (string s in Request.ServerVariables)
       {
           Response.Write(s + "  :  " + Request.ServerVariables[s] + "
"); }

伺服器變量名,通過Request.ServerVariables[伺服器變量名]獲取的值

  • APPL_MD_PATH : /LM/W3SVC/894523/Root
  • APPL_PHYSICAL_PATH : D:\VssWorkFolder\British_School_MIS\src\WebSite\
  • INSTANCE_META_PATH : /LM/W3SVC/894523
  • LOCAL_ADDR : 192.168.1.6
  • PATH_INFO : /SysOption/BillingSetup1.aspx
  • PATH_TRANSLATED : D:\VssWorkFolder\British_School_MIS\src\WebSite\SysOption\BillingSetup1.aspx
  • REMOTE_ADDR : 192.168.1.6
  • REMOTE_HOST : 192.168.1.6
  • SCRIPT_NAME : /SysOption/BillingSetup1.aspx
  • SERVER_NAME : 192.168.1.6
  • URL : /SysOption/BillingSetup1.aspx

http地址與本機地址的相互轉化[編輯]

在伺服器端讀取一個文件,需要把這個文件的http地址轉化為本機地址。如:

 Response.Write(Request.MapPath(Request.Path)); 

反之,轉換為http地址使用Page.ResolveClientUrl或Page.ResolveUrl:

 Response.Write(Page.ResolveClientUrl("~/a/a.jpg"));      输出为 ../a/a.jpg 
 Response.Write(Page.ResolveUrl("~/a/a.jpg"));              输出为 /a/a.jpg

ServerVariables集合對象中保存的常用信息變量
名字 解釋
Request.ServerVariables("Appl_Physical_Path") 與應用程式元資料庫路徑相應的物理路徑
Request.ServerVariables("All_Http") 客戶端發送的所有HTTP標頭,前綴HTTP_
Request.ServerVariables("All_Raw") 客戶端發送的所有HTTP標頭,其結果和客戶端發送時一樣,沒有前綴HTTP_
Request.ServerVariables("Appl_MD_Path") 應用程式的元資料庫路徑
Request.ServerVariables("Auth_Password") 當使用基本驗證模式時,客戶在密碼對話框中輸入的密碼
Request.ServerVariables("Auth_Type") 是用戶訪問受保護的腳本時,伺服器用於檢驗用戶的驗證方法
Request.ServerVariables("Auth_User") 代證的用戶名
Request.ServerVariables("Cert_Cookie") 唯一的客戶證書ID號
Request.ServerVariables("Cert_Flag") 客戶證書標誌,如有客戶端證書,則bit0為0如果客戶端證書驗證無效,bit1被設置為1
Request.ServerVariables("Cert_Issuer") 用戶證書中的發行者欄位
Request.ServerVariables("Cert_Keysize") 安全套接字層連接關鍵字的位數,如128
Request.ServerVariables("Cert_Secretkeysize") 伺服器驗證私人關鍵字的位數如1024
Request.ServerVariables("Cert_Serialnumber") 客戶證書的序列號欄位
Request.ServerVariables("Cert_Server_Issuer") 伺服器證書的發行者欄位
Request.ServerVariables("Cert_Server_Subject") 伺服器證書的主題欄位
Request.ServerVariables("Cert_Subject") 客戶端證書的主題欄位
Request.ServerVariables("Content_Length") 客戶端發出內容的長度
Request.ServerVariables("Content_Type") 客戶發送的form內容或HTTPPUT的數據類型
Request.ServerVariables("Https") 如果請求穿過安全通道(SSL),則返回ON如果請求來自非安全通道,則返回OFF
Request.ServerVariables("Http_Accept_Encoding") 返回內容如:gzip,deflate
Request.ServerVariables("Http_Accept_Language") 返回內容如:en-us
Request.ServerVariables("Http_Connection") 返回內容:Keep-Alive
Request.ServerVariables("Http_Cookie") 返回包含在request中的cookie字符串
Request.ServerVariables("Http_Host") 返回伺服器地址
Request.ServerVariables("Http_User_Agent") 返回內容:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)
Request.ServerVariables("Https_Keysize") 安全套接字層連接關鍵字的位數,如128
Request.ServerVariables("Http_Referer") 請求的字符串內容
Request.ServerVariables("Https_Secretkeysize") 伺服器驗證私人關鍵字的位數如1024
Request.ServerVariables("Https_Server_Issuer") 伺服器證書的發行者欄位
Request.ServerVariables("Https_Server_Subject") 伺服器證書的主題欄位
Request.ServerVariables("Instance_ID") IIS實例的ID號
Request.ServerVariables("Instance_Meta_Path") 響應請求的IIS實例的元資料庫路徑
Request.ServerVariables("Local_Addr") 返回接受請求的伺服器地址
Request.ServerVariables("Path_Info") 客戶端提供的路徑信息
Request.ServerVariables("Path_Translated") 通過由虛擬至物理的映射後得到的路徑
Request.ServerVariables("Query_String") 查詢字符串內容
Request.ServerVariables("Remote_Addr") 發出請求的遠程主機的IP位址
Request.ServerVariables("Remote_Host") 發出請求的遠程主機名稱
Request.ServerVariables("Request_Method") 提出請求的方法比如GET、HEAD、POST等等
Request.ServerVariables("Server_Name") 伺服器的主機名、DNS地址或IP位址
Request.ServerVariables("Server_Port_Secure") 如果接受請求的伺服器埠為安全埠時,則為1,否則為0
Request.ServerVariables("Server_Protocol") 伺服器使用的協議的名稱和版本
Request.ServerVariables("Server_Software") 應答請求並運行網關的伺服器軟體的名稱和版本
Request.ServerVariables("Server_Port") 接受請求的伺服器埠號
Request.ServerVariables("Script_Name") 執行腳本的名稱
Request.ServerVariables("Url") 返回伺服器地址

取得客戶端瀏覽器信息[編輯]

通過Request對象的Browser屬性得到。需要利用Browser屬性生成一個HttpBrowserCapabilities類型的對象實例。

HttpBrowserCapabilities類具有的常用屬性
名字 解釋
Browser 檢測瀏覽器
Version 檢測瀏覽器的版本
Type 檢測瀏覽器的的類型
Platform 檢測瀏覽器所在平台
Frames 檢測瀏覽器是否支持Frames
ActiveXControls 檢測瀏覽器是否支持ActiveX外掛程式
Cookies 檢測瀏覽器是否支持Cookies
VBScript 檢測瀏覽器是否支持VBSCRIPT
Javascript 檢測瀏覽器是否支持Javascript

讀取客戶端Cookie[編輯]

Cookie是在HTTP協議下伺服器或腳本可以維護客戶工作站上信息的一種方式。Cookie是由Web伺服器保存在用戶瀏覽器上的小文本文件,它可以包含有關用戶的信息,這些信息以名/值對的形式儲存在文本文件中。無論何時,只要用戶連接接到伺服器,Web站點就可以訪問Cookie信息。Cookie保存在用戶的Cookie文件中,當下一次用戶返回時,仍然可以對它進行調用。Cookies集合是由一些Cookie對象組成的。Cookie對象的類名為HttpCookie。

HttpCookie類的主要屬性
名字 解釋
ExpiresAbsolute 賦一個日期,過了這個日期Cookie就不能再被使用
Comment 獲取或設置伺服器可添加到Cookie中的注釋
CommentUri 獲取或設置伺服器可通過Cookie來提供的URI注釋
Discard 獲取或設置由伺服器設置的丟棄標誌
Domain 定義Cookie要傳送的唯一域
Expired false:過期|沒過期)
Expires 獲取或設置Cookie的過期日期和時間(返回DateTime)(默認MinValue,會話Cookie)
HasKeys false)
HttpOnly false)
Item 獲取HttpCookie.Values屬性的捷徑(為與老ASP版本兼容)
Name 獲取或設置Cookie名
Path 獲取或設置要與當前Cookie一起傳輸的虛擬路徑。獲取或設置Cookie適用於的URI
Port 獲取或設置Cookie適用於的TCP埠的列表
Secure 獲取或設置是否使用安全套接字層SSL(即僅通過HTTPS)傳輸Cookie
TimeStamp 獲取Cookie作為DateTime發出的時間
Value 獲取或設置單個Cookie的值
Values 獲取單個Cookie對象所包含的鍵值對的集合
Version 獲取或設置Cookie的HTTP狀態維護版本

使用Cookie時,應注意以下幾點

  • 使用Cookie保存客戶端瀏覽器請求伺服器頁面的請求信息時,保存時間的長短取決於Cookie對象的Expires屬性,可以根據需要來設置。若未設置Cookie的失效日期,則它們僅保存到關閉瀏覽器為止。若將Cookie對象的Expires屬性設置為DateTime.MaxValue,則表示Cookie永遠不會過期。
  • Cookie存儲的數據量有所限制,大多數瀏覽器支持的最大容量為4096位元組,因此不要用Cookie來保存大量數據。
  • 並非所有瀏覽器都支持Cookie,並且數據是以明文形式保存在客戶端計算機中,因此最好不要用Cookie來保存敏感的未加密數據。
  • 在ASP.NET中有兩個Cookies集合,即:Response對象的Cookies集合和Request對象的Cookies集合,但兩者的作用有所不同,通過前者可以將Cookie寫入客戶端,通過後者可以讀取存儲在客戶端的Cookie。