Asp.net內建對象之Request對象(概述及應用)

來源:互聯網
上載者:User

前言:
Request對象主要用於擷取來自用戶端的資料,如使用者填入表單的資料、儲存在用戶端的Cookie等。

一、Request對象概述

1、主要屬性

ApplicationPath 擷取伺服器上asp.net應用程式的虛擬應用程式根路徑
Browser 擷取有關正在請求的用戶端的瀏覽器功能的資訊,該屬性值為:HttpBrowserCapabilities對 象
ContentEncoding 擷取或設定實體主體的字元集。該屬性值為表示用戶端的字元集Encoding對象
ContentLength 指定用戶端發送的內容長度,以位元組為單位
ContentType 擷取或設定傳入請求的MIME內容類型。
Cookies 擷取用戶端發送的Cookie集合,該屬性值為表示用戶端的Cookie變數的 HttpCookieCollection對象
CurrentExecutionFilePath 擷取當前請求的虛擬路徑
FilePath 擷取當前請求的虛擬路徑
Files 擷取用戶端上傳的檔案集合。該屬性值為HttpFileCollection對象,表示用戶端上傳的檔案集合
Form 擷取表單變數集合
HttpMethod 擷取用戶端使用的HTTP資料轉送方法(如:get、post或head)
Item 擷取Cookies、Form、QueryString或ServerVariables集合中指定的對象
Params 擷取Cookies、Form、QueryString或ServerVariables項的組合集合
Path 擷取當前請求的虛擬路徑
PathInfo 擷取具有URL副檔名的資源的附加路徑資訊
PhysicalApplicationPath 擷取當前正在執行的伺服器應用程式的根目錄的物理檔案系統路徑
PhysicalPath 擷取與請求的URL相對應的物理檔案路徑
QueryString 擷取HTTP查詢字串變數集合。該屬性值為:NameValueCollection對象,它包含由用戶端發送的查詢字串變數集合
RequestType 擷取或設定用戶端使用HTTP資料轉送的方式(get或post)
ServerVariables 擷取Web伺服器變數的集合
TotalBytes 擷取當前輸入資料流的位元組數
Url 擷取有關當前請求URL的資訊
UserHostAddress 擷取遠程用戶端的IP主機地址

2、主要方法

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

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

二、Request對象的應用

1.讀取表單變數四種方式

(1).使用Request.Form屬性讀取表單變數
(2).使用Request.QueryString屬性讀取表單變數
(3).使用Request.Params屬性讀取表單變數
(4).通過伺服器控制項的屬性直接讀取表單變數

(1).使用Request.Form屬性讀取表單變數

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

(2)使用Request.QueryString屬性讀取表單變數

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

(3)使用Request.Params屬性讀取表單變數

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

Request:包含以上兩種方式(優先擷取GET方式提交的資料),它會在QueryString、Form、ServerVariable中都按先後順序搜尋一遍。Request.Params是所有post和get傳過來的值的集合,request.params其實是一個集合,它依次包括request.QueryString、request.Form、request.cookies和request.ServerVariable。

注意:當使用Request.Params的時候,這些集合項目中最好不要有同名項。如果僅僅是需要Form中的一個資料,但卻使用了Request而不是Request.Form,那麼程式將在QueryString、ServerVariable中也搜尋一遍。如果正好QueryString或者ServerVariable裡面也有同名的項,那麼得到的就不是想要的值了。

(4)通過伺服器控制項的屬性直接讀取表單變數

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

2.讀取查詢字串變數

在瀏覽網頁時,經常看到瀏覽器地址欄中顯示“xxx.aspx?id=8018”之類的URL,其中xxx.aspx表示要訪問的.aspx網頁,問號(?)後面跟的內容便是查詢字串,其作用是將變數的名稱和值傳送給這個ASP.NET檔案來處理。查詢字串變數可以通過以下幾種方式產生。

(1).若將HtmlForm控制項的Method屬性設定為get,則當使用者提交網頁時,表單資料將作為查詢字串變數附在網址後面被發送到伺服器端。
(2).使用<a>…</a>標記或HyperLink控制項建立超文本連結時,可以將查詢字串放在目標URL後面,並使用問號“?”來分隔URL與查詢字串
(3).調用Response.Redirect方法時,若在網址參數後面附有變數名/值對,則開啟目標網頁時這些變數值附在該網址後面被發送到伺服器端。
(4).在瀏覽器地址欄中輸入請求URL時,在URL後輸入問號“?”和查詢字串。例如: http://…/t.aspx?Id=8018

在上述場合,均可通過Request.QueryString屬性來檢索查詢字串變數。

如下代碼:

複製代碼 代碼如下://在登陸頁面

protected void Button1_Click(object sender, EventArgs e)
{
//登陸
//if (txtUserName.Text == "admin" && txtPwd.Text == "123")
//{
// Session["Info"] = "隨便一個值";
// Response.Redirect("Request2_test.aspx?Info=" + txtUserName.Text);
//}
//else
//{
// Response.Redirect("Request2_test.aspx?error=登陸失敗!");
//}
/***********************************方法2****************************************/
//或者
if (txtUserName.Text == "admin" && txtPwd.Text == "123")
{
Response.Redirect("Request2_test.aspx?Info=" + txtUserName.Text + "&check=1");

}
else
{
Response.Redirect("Request2_test.aspx?error=登陸失敗!");
}
}

在驗證頁面複製代碼 代碼如下:protected void Page_Load(object sender, EventArgs e)
{
//驗證頁面
//if (Session["Info"] != null && Session["Info"].ToString() == "隨便一個值")
//{
// Response.Write("登陸成功!<br>" + Request.QueryString["Info"] + ",歡迎訪問本站");
// //Response.Write("登陸成功!<br>" + Request["Info"] + ",歡迎訪問本站");
// //Response.Write("登入成功!<br>"+Request.Form["username"]+",歡迎訪問本站");

//}
//else
//{
// Response.Write("登陸失敗");
//}
/***************************************方法2**********************************/
if (Convert.ToInt32(Request["check"]) == 1)
{
Response.Write("登陸成功!<br>" + Request.QueryString["Info"] + ",歡迎訪問本站");
}
else
{
Response.Write("登陸失敗");
}
}

3.取得Web伺服器端的系統資訊

Request對象使用ServerVariables集合對象儲存伺服器端系統資訊,這些資訊變數包含在HTTP頭部中隨HTTP請求一起傳送。使用Request對象的ServerVariables集合對象取得環境變數的文法如下: Request.ServerVariables[環境變數名]

ServerVariables集合對象中儲存的常用資訊變數如下:

複製代碼 代碼如下:Response.Write(Request.ServerVariables["LOCAL_ADDR"]);//遠端伺服器的地址
Response.Write("<br>");
Response.Write(Request.ServerVariables["Remote_ADDR"]);//瀏覽器所在主機的IP地址
Response.Write("<br>");
Response.Write(Request.Browser.Type.ToString());//瀏覽器的類型
Response.Write("<br>");
Response.Write(Request.Browser.Platform.ToString());//瀏覽器所在的平台
Response.Write("<br>");
Response.Write(Request.ServerVariables["url"]);

4.取得用戶端瀏覽器資訊

通過Request對象的Browser屬性得到。需要利用Browser屬性產生一個HttpBrowserCapabilities類型的對象執行個體。HttpBrowserCapabilities類具有的常用屬性如下:

複製代碼 代碼如下:Response.Write("瀏覽器的類型是:" + Request.Browser.Browser.ToString()+"<br>");
Response.Write("瀏覽器的版本是:" + Request.Browser.Version.ToString()+"<br>");
Response.Write("瀏覽器的所在平台是:" + Request.Browser.Platform.ToString()+"<br>");
Response.Write("瀏覽器是否支援架構:" + Request.Browser.Frames.ToString()+"<br>");
Response.Write("瀏覽器是否支援Cookies:" + Request.Browser.Cookies.ToString()+"<br>");
Response.Write("瀏覽器是否支援Javascript:" + Request.Browser.JavaScript.ToString()+"<br>");

5.讀取用戶端Cookie

Cookie是在HTTP協議下伺服器或指令碼可以維護客戶工作站上資訊的一種方式。Cookie是由Web伺服器儲存在使用者瀏覽器上的小文字檔,它可以包含有關使用者的資訊,這些資訊以名/值對的形式儲存在文字檔中。無論何時,只要使用者串連接到伺服器,Web網站就可以訪問Cookie資訊。Cookie儲存在使用者的Cookie檔案中,當下一次使用者返回時,仍然可以對它進行調用。

Cookies集合是由一些Cookie對象組成的。Cookie對象的類名為HttpCookie。HttpCookie類的主要屬性如下:

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

[1].使用Cookie儲存用戶端瀏覽器請求伺服器頁面的請求資訊時,儲存時間的長短取決於Cookie對象的Expires屬性,可以根據需要來設定。若未設定Cookie的失效日期,則它們僅儲存到關閉瀏覽器為止。若將Cookie對象的Expires屬性設定為DateTime.MaxValue,則表示Cookie永遠不會到期。

[2].Cookie儲存的資料量有所限制,大多數瀏覽器支援的最大容量為4096位元組,因此不要用Cookie來儲存大量資料。

[3]. 並非所有瀏覽器都支援Cookie,並且資料是以明文形式儲存在用戶端電腦中,因此最好不要用Cookie來儲存敏感的未加密資料。

[4].在ASP.NET中有兩個Cookies集合,即:Response對象的Cookies集合和Request對象的Cookies集合,但兩者的作用有所不同,通過前者可以將Cookie寫入用戶端,通過後者可以讀取儲存在用戶端的Cookie。

如下操作:

樣本如下:

複製代碼 代碼如下:protected void Page_Load(object sender, EventArgs e)
{
HttpCookie c1=Request.Cookies["UserName"];
HttpCookie c2 = Request.Cookies["Password"];
if (c1 != null || c2 != null)
{
//當儲存完Cookie之後(也就是說"儲存或永久儲存"),這個才能輸出,當第二次用統一瀏覽器開啟該網站的時候就會輸出
Response.Write(c1.Value + "歡迎光臨");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//提交
if (TextBox1.Text == "admin" && TextBox2.Text == "123")
{
Response.Write("歡迎光臨"+TextBox1.Text);
Response.Cookies["UserName"].Value = TextBox1.Text;
Response.Cookies["Password"].Value = TextBox2.Text;
if (DropDownList1.SelectedItem.Text == "永久儲存")
{
//預設cookies失效時間是直到關閉瀏覽器
//Cookie儲存永久
Response.Cookies["UserName"].Expires = DateTime.MaxValue;
Response.Cookies["Password"].Expires = DateTime.MaxValue;
}
else
{
//Cookie永不儲存
Response.Cookies["UserName"].Expires = DateTime.Now;
Response.Cookies["Password"].Expires = DateTime.Now;
}
}

}

當我們再次開啟該網站(同一瀏覽器)的時候,就會彈出“admin歡迎光臨"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.