ASP.NET/Request
用戶在client使用Web瀏覽器向Web應用程序發出請求時,會將client信息發給server。server收到一個HTTP請求,包括了全部查詢字符串參數或表單參數、Cookie數據以及瀏覽器信息。在asp.net中執行時把這些請求信息封裝成Request對象。
Request對象最常用的是Form和QueryString集合。
主要屬性
編輯屬性名字 | 解釋 |
---|---|
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 則:
- Request.FilePath值為http://www.cnblogs.com/default.aspx
- Request.PathInfo 值為 /books
- Request.Path 值為 http://www.cnblogs.com/default.aspx/books
- Request.RawUrl 值為 http://www.cnblogs.com/default.aspx/books
如果請求地址為http://www.cnblogs.com/defaut.aspx?id=1&name=kk則
- Request.FilePath值為http://www.cnblogs.com/default.aspx
- Request.PathInfo 值為 ""(空字符串)
- Request.Path 值為 http://www.cnblogs.com/default.aspx
- Request.RawUrl 值為 http://www.cnblogs.com/default.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
名字 | 解釋 |
---|---|
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類型的對象實例。
名字 | 解釋 |
---|---|
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。
名字 | 解釋 |
---|---|
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。