Asp.net內(nèi)置對(duì)象之Request對(duì)象(概述及應(yīng)用)
前言:
Request對(duì)象主要用于獲取來(lái)自客戶端的數(shù)據(jù),如用戶填入表單的數(shù)據(jù)、保存在客戶端的Cookie等。
一、Request對(duì)象概述
1、主要屬性
ApplicationPath | 獲取服務(wù)器上asp.net應(yīng)用程序的虛擬應(yīng)用程序根路徑 |
Browser | 獲取有關(guān)正在請(qǐng)求的客戶端的瀏覽器功能的信息,該屬性值為:HttpBrowserCapabilities對(duì) 象 |
ContentEncoding | 獲取或設(shè)置實(shí)體主體的字符集。該屬性值為表示客戶端的字符集Encoding對(duì)象 |
ContentLength | 指定客戶端發(fā)送的內(nèi)容長(zhǎng)度,以字節(jié)為單位 |
ContentType | 獲取或設(shè)置傳入請(qǐng)求的MIME內(nèi)容類型。 |
Cookies | 獲取客戶端發(fā)送的Cookie集合,該屬性值為表示客戶端的Cookie變量的 HttpCookieCollection對(duì)象 |
CurrentExecutionFilePath | 獲取當(dāng)前請(qǐng)求的虛擬路徑 |
FilePath | 獲取當(dāng)前請(qǐng)求的虛擬路徑 |
Files | 獲取客戶端上載的文件集合。該屬性值為HttpFileCollection對(duì)象,表示客戶端上載的文件集合 |
Form | 獲取窗體變量集合 |
HttpMethod | 獲取客戶端使用的HTTP數(shù)據(jù)傳輸方法(如:get、post或head) |
Item | 獲取Cookies、Form、QueryString或ServerVariables集合中指定的對(duì)象 |
Params | 獲取Cookies、Form、QueryString或ServerVariables項(xiàng)的組合集合 |
Path | 獲取當(dāng)前請(qǐng)求的虛擬路徑 |
PathInfo | 獲取具有URL擴(kuò)展名的資源的附加路徑信息 |
PhysicalApplicationPath | 獲取當(dāng)前正在執(zhí)行的服務(wù)器應(yīng)用程序的根目錄的物理文件系統(tǒng)路徑 |
PhysicalPath | 獲取與請(qǐng)求的URL相對(duì)應(yīng)的物理文件路徑 |
QueryString | 獲取HTTP查詢字符串變量集合。該屬性值為:NameValueCollection對(duì)象,它包含由客戶端發(fā)送的查詢字符串變量集合 |
RequestType | 獲取或設(shè)置客戶端使用HTTP數(shù)據(jù)傳輸?shù)姆绞?get或post) |
ServerVariables | 獲取Web服務(wù)器變量的集合 |
TotalBytes | 獲取當(dāng)前輸入流的字節(jié)數(shù) |
Url | 獲取有關(guān)當(dāng)前請(qǐng)求URL的信息 |
UserHostAddress | 獲取遠(yuǎn)程客戶端的IP主機(jī)地址 |
2、主要方法
(1)MapPath(VirtualPath):將當(dāng)前請(qǐng)求的URL中的虛擬路徑virtualPath映射到服務(wù)器上的物理路徑。參數(shù)virtualPath指定當(dāng)前請(qǐng)求的虛擬路徑,可以是絕對(duì)路徑或相對(duì)路徑。該方法的返回值為由virtualPath指定的服務(wù)器物理路徑。
(2)SaveAs (Filename,includeHeaders):將http請(qǐng)求保存到磁盤。參數(shù)filename指定物理驅(qū)動(dòng)器路徑,includeHeaders是一個(gè)布爾值,指定是否應(yīng)將HTTP標(biāo)頭保存到磁盤。
二、Request對(duì)象的應(yīng)用
1.讀取窗體變量四種方式:
(1).使用Request.Form屬性讀取窗體變量
(2).使用Request.QueryString屬性讀取窗體變量
(3).使用Request.Params屬性讀取窗體變量
(4).通過(guò)服務(wù)器控件的屬性直接讀取窗體變量
(1).使用Request.Form屬性讀取窗體變量
HtmlForm控件的Method屬性的默認(rèn)值為post。在這種情況下,當(dāng)用戶提交網(wǎng)頁(yè)時(shí),表單數(shù)據(jù)將以HTTP標(biāo)頭的形式發(fā)送到服務(wù)器端。此時(shí),可以使用Request對(duì)象的Form屬性來(lái)讀取窗體變量。如:txtUserName和txtPassword的文本框控件,則可以通過(guò)以下形式來(lái)讀取它們的值: Request.Form["txtUserName"] ;Request.Form["txtPassword"]
(2)使用Request.QueryString屬性讀取窗體變量
如果將HtmlForm控件的Method屬性設(shè)置為get,則當(dāng)用戶提交網(wǎng)頁(yè)時(shí),表單數(shù)據(jù)將附加在網(wǎng)址后面發(fā)送到服務(wù)器端。在這種情況下,可以使用Request對(duì)象的QueryString屬性讀取窗體變量。Request.QueryString["txtUserName"] ;Request.QueryString["txtPassword"]
(3)使用Request.Params屬性讀取窗體變量
不論HtmlForm控件的Method屬性取什么值,都可以使用Request對(duì)象的Params屬性來(lái)讀取窗體變量的內(nèi)容,如Request.Params["txtPassword"]或者Request.["txtPassword"],優(yōu)先獲取GET方式提交的數(shù)據(jù),它會(huì)在QueryString、Form、ServerVariable中都按先后順序搜尋一遍。
Request:包含以上兩種方式(優(yōu)先獲取GET方式提交的數(shù)據(jù)),它會(huì)在QueryString、Form、ServerVariable中都按先后順序搜尋一遍。Request.Params是所有post和get傳過(guò)來(lái)的值的集合,request.params其實(shí)是一個(gè)集合,它依次包括request.QueryString、request.Form、request.cookies和request.ServerVariable。
注意:當(dāng)使用Request.Params的時(shí)候,這些集合項(xiàng)中最好不要有同名項(xiàng)。如果僅僅是需要Form中的一個(gè)數(shù)據(jù),但卻使用了Request而不是Request.Form,那么程序?qū)⒃赒ueryString、ServerVariable中也搜尋一遍。如果正好QueryString或者ServerVariable里面也有同名的項(xiàng),那么得到的就不是想要的值了。
(4)通過(guò)服務(wù)器控件的屬性直接讀取窗體變量
除了以上3種方式之外,也可以通過(guò)服務(wù)器控件的屬性來(lái)直接讀取窗體變量,這是獲取表單數(shù)據(jù)的最常用、最簡(jiǎn)單的方式。例如: txtUserName.Text
2.讀取查詢字符串變量
在瀏覽網(wǎng)頁(yè)時(shí),經(jīng)??吹綖g覽器地址欄中顯示“xxx.aspx?id=8018”之類的URL,其中xxx.aspx表示要訪問(wèn)的.aspx網(wǎng)頁(yè),問(wèn)號(hào)(?)后面跟的內(nèi)容便是查詢字符串,其作用是將變量的名稱和值傳送給這個(gè)ASP.NET文件來(lái)處理。查詢字符串變量可以通過(guò)以下幾種方式生成。
(1).若將HtmlForm控件的Method屬性設(shè)置為get,則當(dāng)用戶提交網(wǎng)頁(yè)時(shí),窗體數(shù)據(jù)將作為查詢字符串變量附在網(wǎng)址后面被發(fā)送到服務(wù)器端。
(2).使用<a>…</a>標(biāo)記或HyperLink控件創(chuàng)建超文本鏈接時(shí),可以將查詢字符串放在目標(biāo)URL后面,并使用問(wèn)號(hào)“?”來(lái)分隔URL與查詢字符串
(3).調(diào)用Response.Redirect方法時(shí),若在網(wǎng)址參數(shù)后面附有變量名/值對(duì),則打開(kāi)目標(biāo)網(wǎng)頁(yè)時(shí)這些變量值附在該網(wǎng)址后面被發(fā)送到服務(wù)器端。
(4).在瀏覽器地址欄中輸入請(qǐng)求URL時(shí),在URL后輸入問(wèn)號(hào)“?”和查詢字符串。例如: http://…/t.aspx?Id=8018
在上述場(chǎng)合,均可通過(guò)Request.QueryString屬性來(lái)檢索查詢字符串變量。
如下代碼:
//在登陸頁(yè)面
protected void Button1_Click(object sender, EventArgs e)
{
//登陸
//if (txtUserName.Text == "admin" && txtPwd.Text == "123")
//{
// Session["Info"] = "隨便一個(gè)值";
// 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=登陸失敗!");
}
}
在驗(yàn)證頁(yè)面
protected void Page_Load(object sender, EventArgs e)
{
//驗(yàn)證頁(yè)面
//if (Session["Info"] != null && Session["Info"].ToString() == "隨便一個(gè)值")
//{
// Response.Write("登陸成功!<br>" + Request.QueryString["Info"] + ",歡迎訪問(wèn)本站");
// //Response.Write("登陸成功!<br>" + Request["Info"] + ",歡迎訪問(wèn)本站");
// //Response.Write("登錄成功!<br>"+Request.Form["username"]+",歡迎訪問(wèn)本站");
//}
//else
//{
// Response.Write("登陸失敗");
//}
/***************************************方法2**********************************/
if (Convert.ToInt32(Request["check"]) == 1)
{
Response.Write("登陸成功!<br>" + Request.QueryString["Info"] + ",歡迎訪問(wèn)本站");
}
else
{
Response.Write("登陸失敗");
}
}
3.取得Web服務(wù)器端的系統(tǒng)信息
Request對(duì)象使用ServerVariables集合對(duì)象保存服務(wù)器端系統(tǒng)信息,這些信息變量包含在HTTP頭部中隨HTTP請(qǐng)求一起傳送。使用Request對(duì)象的ServerVariables集合對(duì)象取得環(huán)境變量的語(yǔ)法如下: Request.ServerVariables[環(huán)境變量名]
ServerVariables集合對(duì)象中保存的常用信息變量如下:
Response.Write(Request.ServerVariables["LOCAL_ADDR"]);//遠(yuǎn)端服務(wù)器的地址
Response.Write("<br>");
Response.Write(Request.ServerVariables["Remote_ADDR"]);//瀏覽器所在主機(jī)的IP地址
Response.Write("<br>");
Response.Write(Request.Browser.Type.ToString());//瀏覽器的類型
Response.Write("<br>");
Response.Write(Request.Browser.Platform.ToString());//瀏覽器所在的平臺(tái)
Response.Write("<br>");
Response.Write(Request.ServerVariables["url"]);
4.取得客戶端瀏覽器信息
通過(guò)Request對(duì)象的Browser屬性得到。需要利用Browser屬性生成一個(gè)HttpBrowserCapabilities類型的對(duì)象實(shí)例。HttpBrowserCapabilities類具有的常用屬性如下:
Response.Write("瀏覽器的類型是:" + Request.Browser.Browser.ToString()+"<br>");
Response.Write("瀏覽器的版本是:" + Request.Browser.Version.ToString()+"<br>");
Response.Write("瀏覽器的所在平臺(tái)是:" + 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協(xié)議下服務(wù)器或腳本可以維護(hù)客戶工作站上信息的一種方式。Cookie是由Web服務(wù)器保存在用戶瀏覽器上的小文本文件,它可以包含有關(guān)用戶的信息,這些信息以名/值對(duì)的形式儲(chǔ)存在文本文件中。無(wú)論何時(shí),只要用戶連接接到服務(wù)器,Web站點(diǎn)就可以訪問(wèn)Cookie信息。Cookie保存在用戶的Cookie文件中,當(dāng)下一次用戶返回時(shí),仍然可以對(duì)它進(jìn)行調(diào)用。
Cookies集合是由一些Cookie對(duì)象組成的。Cookie對(duì)象的類名為HttpCookie。HttpCookie類的主要屬性如下:
使用Cookie時(shí),應(yīng)注意以下幾點(diǎn)
[1].使用Cookie保存客戶端瀏覽器請(qǐng)求服務(wù)器頁(yè)面的請(qǐng)求信息時(shí),保存時(shí)間的長(zhǎng)短取決于Cookie對(duì)象的Expires屬性,可以根據(jù)需要來(lái)設(shè)置。若未設(shè)置Cookie的失效日期,則它們僅保存到關(guān)閉瀏覽器為止。若將Cookie對(duì)象的Expires屬性設(shè)置為DateTime.MaxValue,則表示Cookie永遠(yuǎn)不會(huì)過(guò)期。
[2].Cookie存儲(chǔ)的數(shù)據(jù)量有所限制,大多數(shù)瀏覽器支持的最大容量為4096字節(jié),因此不要用Cookie來(lái)保存大量數(shù)據(jù)。
[3]. 并非所有瀏覽器都支持Cookie,并且數(shù)據(jù)是以明文形式保存在客戶端計(jì)算機(jī)中,因此最好不要用Cookie來(lái)保存敏感的未加密數(shù)據(jù)。
[4].在ASP.NET中有兩個(gè)Cookies集合,即:Response對(duì)象的Cookies集合和Request對(duì)象的Cookies集合,但兩者的作用有所不同,通過(guò)前者可以將Cookie寫入客戶端,通過(guò)后者可以讀取存儲(chǔ)在客戶端的Cookie。
如下操作:
示例如下:
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie c1=Request.Cookies["UserName"];
HttpCookie c2 = Request.Cookies["Password"];
if (c1 != null || c2 != null)
{
//當(dāng)保存完Cookie之后(也就是說(shuō)"保存或永久保存"),這個(gè)才能輸出,當(dāng)?shù)诙斡媒y(tǒng)一瀏覽器打開(kāi)該網(wǎng)站的時(shí)候就會(huì)輸出
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 == "永久保存")
{
//默認(rèn)cookies失效時(shí)間是直到關(guān)閉瀏覽器
//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;
}
}
}
當(dāng)我們?cè)俅未蜷_(kāi)該網(wǎng)站(同一瀏覽器)的時(shí)候,就會(huì)彈出“admin歡迎光臨"
- Asp.net中Request.Url的各個(gè)屬性對(duì)應(yīng)的意義介紹
- ASP.NET從客戶端中檢測(cè)到有潛在危險(xiǎn)的request.form值的3種解決方法
- asp.net HttpWebRequest自動(dòng)識(shí)別網(wǎng)頁(yè)編碼
- asp.net下Request.QueryString取不到值的解決方法
- ASP.NET筆記之 Request 、Response 與Server的使用
- asp.net中Request.QueryString與Request.Param的區(qū)別分析
- asp.net Request獲取url信息的各種方法比較
- Asp.net response對(duì)象與request對(duì)象使用介紹
- asp.net request.PathInfo實(shí)現(xiàn)的url重寫
- asp.net實(shí)現(xiàn)遍歷Request的信息操作示例
相關(guān)文章
ASP.NET?MVC通過(guò)勾選checkbox更改select的內(nèi)容
這篇文章介紹了ASP.NET?MVC通過(guò)勾選checkbox更改select內(nèi)容的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09ASP.NET Core如何添加統(tǒng)一模型驗(yàn)證處理機(jī)制詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core如何添加統(tǒng)一模型驗(yàn)證處理機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-05-05asp.net 將設(shè)有過(guò)期策略的項(xiàng)添加到緩存中
調(diào)用 Insert 方法,將絕對(duì)過(guò)期時(shí)間或彈性過(guò)期時(shí)間傳遞給該方法。2009-04-04Asp.net內(nèi)置對(duì)象之Cookies(簡(jiǎn)介/屬性方法/基本操作及實(shí)例)
本文將圍繞cookies了解Cookies對(duì)象/Cookie對(duì)象的屬性和方法/Cookie的基本操作及實(shí)例:Cookie的寫入和讀取/Cookie對(duì)象相比Session、Application的優(yōu)缺點(diǎn)扥等,感興趣的朋友可以了解下,或許對(duì)你學(xué)習(xí)cookies有所幫助2013-02-02xUnit 編寫 ASP.NET Core 單元測(cè)試的方法
這篇文章主要介紹了xUnit 編寫 ASP.NET Core 單元測(cè)試的方法,文中代碼非常詳細(xì),幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06ASP.NET自帶對(duì)象JSON字符串與實(shí)體類的轉(zhuǎn)換
這篇文章主要介紹了ASP.NET自帶對(duì)象JSON字符串與實(shí)體類的轉(zhuǎn)換,感興趣的小伙伴們可以參考一下2016-07-07.net平臺(tái)推送ios消息的實(shí)現(xiàn)方法
這篇文章主要介紹了.net平臺(tái)推送ios消息的實(shí)現(xiàn)方法,詳細(xì)講述了各個(gè)具體的實(shí)現(xiàn)步驟并附有源碼供大家參考之用,需要的朋友可以參考下2014-10-10.net?core利用PdfSharpCore操作PDF實(shí)例教程
操作pdf是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常遇到的功能,下面這篇文章主要給大家介紹了關(guān)于.net?core利用PdfSharpCore操作PDF實(shí)例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12