不可或缺的ASP.NET內(nèi)置對象小結(jié)
為什么學習ASP.NET內(nèi)置對象
在ASP.NET中微軟提供了多種內(nèi)置對象提供開發(fā)人員使用,在實際開發(fā)中內(nèi)置對象的使用不可或缺的,在Web網(wǎng)站的數(shù)據(jù)交互,網(wǎng)頁服務(wù)器交互,網(wǎng)頁跳轉(zhuǎn),服務(wù)器數(shù)據(jù)的傳輸?shù)绕渲e足輕重的作用。在初學ASP.NET技術(shù)中也是非常重要的環(huán)節(jié),也是更深學習ASP.NET的“里程碑”。本文章主要介紹ASP.NET的內(nèi)置對象的使用、屬性、方法和工作原理。ASP.NET的內(nèi)置對象主要包括:Response、Response、Session、Cookie、Application、Server
一、Request對象
Request對象用來獲取客戶端在請求一個頁面或傳送一個Form是提供的所有信息。它包括用戶的HTTP變量、能夠識別的瀏覽器、存儲客戶端的Cookie信息和請求地址等。
Request對象是System.Web.httpRequest類的對象
1.屬性
(1) QueryString :獲取HTTP查詢字符串變量集合,主要用于收集HTTP協(xié)議中Get請求發(fā)送的數(shù)據(jù)
(2)Form :獲取窗體或頁面變量的集合,用于收集Post方法發(fā)送的請求數(shù)據(jù)
(3)ServerVarible:環(huán)境變量集合包含了服務(wù)器和客戶端的系統(tǒng)內(nèi)信息
(4)Params:它是QueryString、Form和ServerVarible這三種方式的集合,不區(qū)分是由哪種方式傳遞的參數(shù)
(5)ApplicationPath:獲取服務(wù)器上ASP.NET虛擬應用程序的根目錄路徑
(6)ContertLength:指定客戶端發(fā)送的內(nèi)容長度
(7)Cookies:獲取客戶端發(fā)送的Cookie集合
(8)FilePath:獲取當前請求的虛擬路徑
(9)Files:獲取采用多部分MIME格式的由客戶端上載的文件集合
(10) Item:從Cookies, From, QueryString或ServerVariables集合中獲取指定的對象
(11) Path:獲取當前請求的虛擬路徑
(12)Url:獲取有關(guān)當前請求的URL信息
(13)UserHostName:獲取遠程客戶端的DNS名稱
(14)UserHostAddress:獲取遠程客戶端的IP主機地址
(15)IsLocal:獲取一個值,該值指示該請求是否來自本地計算機
(16)Browser:獲取或設(shè)置有關(guān)正在請求的客戶端瀏覽器功能信息
2.方法
(1) BinaryRead():執(zhí)行對當前輸入流進行制定字節(jié)數(shù)的二進制讀取
(2)SaveAs():將HTTP請求保存到磁盤
(3) MapPath():將指定的路徑映射到物理路徑
二、Response對象
Response對象是HttpRespone類的一個實例。該類主要是封裝來自ASP.NET操作的HTTP相應信息。Response對象將數(shù)據(jù)作為請求的結(jié)果從服務(wù)器發(fā)送到客戶瀏覽器中,并提供有關(guān)響應的消息。它可用來在頁面中輸出數(shù)據(jù),在頁面中跳轉(zhuǎn),還可以傳遞各個頁面的參數(shù)。
1.方法
(1)Redirect:將網(wǎng)頁重新轉(zhuǎn)到另一地址
(2) Write:寫出指定字符串。
(3)AppendHeader:
語法格式
Response.AppendHeader(Name,Value)
參數(shù)Name為HTTP頭,參數(shù)Value為HTTP頭的值。
HTTP頭是HTTP協(xié)議規(guī)定的請求和響應消息都支持的頭域內(nèi)容。HTTP頭是頁面通過HTTP協(xié)議訪問頁面時,最先響應的請求和響應消息,例如HTTP頭中的Location,Location頭用于將頁面重定向到另一個頁面,與Redirect方法相似。
(3)WriteFile 將文件輸出到客戶端
(4)Flush 將緩沖區(qū)的數(shù)據(jù)輸出到客戶端瀏覽器
(5)End 停止并結(jié)束ASP網(wǎng)頁的處理
(6)Close 關(guān)閉客戶端的聯(lián)機
(7)ClearHeaders 清除緩沖區(qū)中的頁面標題
(8)Clear 清除緩沖區(qū)的數(shù)據(jù)
(9)BinaryWrite 將二進制字符或字符串輸出到客戶端瀏覽器
(10)AppendToLog 將自定義的數(shù)據(jù)加入到IIS日志文件中(Log File),以便追蹤與分析記錄。
2.屬性
(1)ContentType:輸出流的內(nèi)容類型比如html(text/html) 、普通文本(text/pain)還是JPEG圖片(image/JPEG)。
(2)ContentEncoding:輸出流的編碼
(3)Cookies : 返回瀏覽器的cookies的集合
(4)Buffer : 設(shè)置緩沖信息, true | false .默認是true
(5)Expires : 獲取或設(shè)置在瀏覽器上緩存的頁過期之前的分鐘數(shù), 設(shè)置為0,則立刻過期
三、Page對象
每個aspx文件對應的一個page對象,.aspx頁面與后臺.cs代碼類(局部類)合并生成頁面類,Page對象是頁面類的實例。所有的.aspx文件(Web窗體頁)都繼承自System.Web.UI.Page類
<%@ Page Language="C#" ---指明后臺使用C#語言 AutoEventWireup="true" ---設(shè)置是否自動調(diào)用網(wǎng)頁Load事件,默認是true CodeBehind="WebDemo1.aspx.cs"---其.aspx文件上綁定的后臺代碼文件 Inherits="ASP.NETDemo.Demo1.WebDemo1" ---后臺代碼類 %>
1.屬性
(1) IsPostBack:該屬性可以檢查.aspx頁是否為傳遞回服務(wù)器的頁面,常用于判斷頁面是否為首次加載。
如果為true則為回發(fā)響應,如果為false則為首次加載
(2) IsValid:該屬性用于判斷頁面中的所有輸入的內(nèi)容是否應經(jīng)通過驗證,它是一個布爾值的屬性。當需要使用服務(wù)器端驗證時,可以使用該屬性。
(3) IsCrossPagePostBack:該屬性判斷頁面是否使用跨頁提交,它是一個布爾值的屬性。
(4) Response屬性和Request屬性上面講過了
2.事件
Page類常用的事件及執(zhí)行的先后順序:
(1) Page.PreInit 事件:在頁初始化開始時發(fā)生
(2) Page.Init 事件:當服務(wù)器控件初始化時發(fā)生;初始化是控件生存期的第一步。 (繼承自 Control。)
(3) Page.InitComplite事件:在頁初始化完成時發(fā)生
(4) Page.PreLoad事件:在頁 Load 事件之前發(fā)生
(5) Page.Load事件:當服務(wù)器控件加載到 Page 對象中時發(fā)生。 (繼承自 Control )
(6) Page.LoadComplete 事件:在頁生命周期的加載階段結(jié)束時發(fā)生
(7) Page.PreRender事件 :在加載 Control 對象之后、呈現(xiàn)之前發(fā)生。 (繼承自 Control。)
(8) Page.PreRenderComplete 事件:在呈現(xiàn)頁內(nèi)容之前發(fā)生
四、ViewState對象
視圖狀態(tài),在 ASP .NET 中,當一個表單被提交時,表單會連同表單值一起出現(xiàn)在瀏覽器窗口中。如何做到的呢?這是因為 ASP .NET 維持了您的 ViewState。 ViewState 會在頁面被提交到服務(wù)器時表明它的狀態(tài)。這個狀態(tài)是通過在帶有 < form runat=“server”> 控件的每個頁面上放置一個隱藏域定義的。
這個對象是ASP.NET中特有的對象,在其他語言的后端技術(shù)中沒有這個對象
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)//如果是第一次訪問 { //先將Count的值設(shè)為0,并且保存在ViewState中 ViewState["count"] = 0; } } protected void btnAdd_Click(object sender, EventArgs e) { //每次點擊按鈕先取出ViewState中的值并且累加之后再次賦給ViewState ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1; Literal1.Text = ViewState["count"].ToString(); } }
使用ViewState實現(xiàn)頁面信息的保存
保存數(shù)據(jù)
ViewState對象存儲數(shù)據(jù)[鍵值對]Key=Value
取出數(shù)據(jù)
根據(jù)Key值取出Value值
總結(jié)
(1) ViewState中保存的數(shù)據(jù)全部被轉(zhuǎn)換成object類型,取出時務(wù)必強制轉(zhuǎn)換成特定類型
(2) ViewState只能在同一個頁面的連續(xù)多次請求之間保存信息,頁面跳轉(zhuǎn)后信息就會丟失
ViewState的本質(zhì)
ViewState的本質(zhì)是一個隱藏域,和原始的.aspx文件中的多出來的標簽一樣,都是一個隱藏域,第一次創(chuàng)建ViewState對象其實是創(chuàng)建了一個隱藏域
五、Session對象
使用方式和ViewState相似
Session對象用于存儲在多個頁面調(diào)用之間特定用戶的信息。Session對象只針對單一網(wǎng)站使用者,不同的客戶端無法相互訪問。Session對象中止聯(lián)機機器離線時,也就是當網(wǎng)站使用者關(guān)掉瀏覽器或者超過設(shè)定Session對象的有效時間,Session對象變量就會關(guān)閉。
1.Session的原理
Session是服務(wù)器將客戶端的數(shù)據(jù)代替客戶端做出對應的保存,問題是不同用戶在選擇商品時,Session是如何區(qū)分不同用戶的選擇?
(1) 服務(wù)器根據(jù)SessionID來區(qū)分不同的用戶,它是一個很長的字符串
(2)SessionID在用戶第一次訪問時由服務(wù)器產(chǎn)生并由用戶瀏覽器保存
(3)用戶每次的操作,瀏覽器在向服務(wù)器請求時都會帶著自己的SessionID
Web服務(wù)器是如何判斷用戶是第一次請求并為其生成SessionID?
(1)用戶第一次打開瀏覽器并登陸網(wǎng)頁,瀏覽器中沒有任何SessionID。
(2)用戶把當前網(wǎng)站的網(wǎng)頁全部關(guān)閉,再次登陸網(wǎng)頁,前面的SessionID就會丟失
(3)用戶使用不同瀏覽器登錄網(wǎng)頁,不同瀏覽器之間的Session無法共享。
2.屬性
(1) SessionID:包含唯一的用戶會話標識符
(2)Timeout:用戶設(shè)置用戶超時的時間,單位為分鐘
3.方法
(1) Add(string name,object value):添加“鍵-值”對
(2)Remove(string name):根據(jù)鍵刪除指定項
(3) Clear():從會話狀態(tài)集合中移除所有的鍵值對
(4)Abandon():結(jié)束Session,取消當前會話
4.用途
(1)不用頁面之間需要傳遞較為復雜的數(shù)據(jù)(對象)
(2)保存用戶的登錄信息,未登錄者禁止訪問相關(guān)頁面
六、Cookie對象
Cookie對象一般用于在客戶端保存一些針對某個用戶的信息。
Cookie本質(zhì)上只是一小段文本字符串,該字符串一般保存在用戶計算機特定文件夾下的某個文件中,每個Cookie都保存到一個對應的文件中。它提供了在客戶端存儲用戶特定信息的手段。例如保存用戶登錄某個網(wǎng)站的用戶名、保存用戶購物時選擇的某些選項、保存是否已經(jīng)投票以防止重復投票等。
當用戶訪問某個服務(wù)器時,如果服務(wù)器要求將Cookie信息也傳遞過來,則瀏覽器就會將其附加到HTTP頭文件中發(fā)送給服務(wù)器。另外,服務(wù)器也可以通知瀏覽器將某個Cookie信息保存到計算機上,但是,一旦將Cookie保存在客戶端計算機上,則只有創(chuàng)建該Cookie的網(wǎng)站才能讀取它。
一般情況下,服務(wù)器都會給Cookie信息限制一個有效的時間段,當超過保存的有效期時,瀏覽器就會自動將其刪除。如果沒有設(shè)置Cookie的有效期,實際上只是將Cookie作為用戶會話信息的一部分進行維護,當用戶關(guān)閉瀏覽器時就會自動丟棄Cookie,而不會將其存儲在用戶的硬盤上。
不過,由于有些網(wǎng)站會利用這種技術(shù)隨意在客戶端保存訪問信息,導致用戶對其很反感,因此,有些用戶可能會通過瀏覽器設(shè)置禁用Cookie,所以使用這種技術(shù)時,最好先檢測是否可以在客戶端存儲Cookie。
1.Cookie的特點
(1) 存儲少量不重要的數(shù)據(jù)
(2)存儲在客戶端的文本文件中(必須要設(shè)置有效期,否則不被存儲)
(3)安全性差
(4)存儲的數(shù)據(jù)類型-字符串
(5)瀏覽器窗口無關(guān),但是與訪問的站點有關(guān)
(6) 具體特定的過期時間和日期
(7) 在客戶端存儲后,將隨著瀏覽器對相關(guān)網(wǎng)站頁面請求而一并發(fā)送到服務(wù)器
2.Cookie的創(chuàng)建
Response.Cookies["User"].Value = TextBox1.Text;
HttpCookie cookie = new HttpCookie("User",TextBox1.Text); Response.Cookies.Add(cookie);
注意:創(chuàng)建Cookie使用Response對象,讀取Cookie使用Request對象
string str=Request.Cookies["User"].Value;
3.屬性
Response.Cookie.Keys:獲取Cookie變量名或者根據(jù)其索引獲取變量值
Response.Cookies.Count:獲取Cookie變量的數(shù)量
Response.Cookies.AllKeys:將Cookies對象中所有的變量名存儲到數(shù)組中。
4.方法
Response.Cookies.Set:用于更新Cookie的變量值
Response.Cookies.Remove:用于刪除Cookie變量
Response.Cookies.Get:用Cookie變量名稱或者索引值獲取變量值。
Response.Cookies.Clear:清除Cookie內(nèi)所有的變量
Response.Cookies.Add:用于Cookie對象中添加Cookie變量。
5.Cookies工作原理圖
七、Application對象
1.作用
應用程序級別的數(shù)據(jù)保存(類似于在CS開發(fā)中在Winform或WPF中聲明的全局變量,這個變量一般在程序開啟的時候創(chuàng)建好了,在程序使用過程中一直存在,但是會跟著不同的程序功能存儲的數(shù)據(jù)可能會發(fā)生變化)
相當于在BS服務(wù)器中存儲的一個變量,只要服務(wù)器本次開啟那么這個數(shù)據(jù)就被創(chuàng)建存儲,只要服務(wù)器不關(guān)閉那么這個數(shù)據(jù)就一直存在,在所有客戶端訪問過程中都可以對這個對象存儲的數(shù)據(jù)進行訪問和更改
使用方式和Session一樣采用“鍵值”對
的方式
2.特征
(1)位置:服務(wù)器內(nèi)存,執(zhí)行速度快
(2)使用范圍:整個應用程序中
(3)類型:任意類型
(4)生命周期:應用程序開始創(chuàng)建到銷毀
3.使用場合
例如統(tǒng)計這個站點的訪問量,或者監(jiān)控當前站點的訪問人數(shù)
4.Global.asax文件
全局應用程序類:Global.asax,可以理解為Application對象主要在這個全局應用程序類中使用
(1) 處理應用程序級別的事件的可選文件
(2)必須放在應用程序的根目錄下
常用事件 | 說明 |
---|---|
Application_Start | 接收第一個請求時觸發(fā) |
Application_End | 應用程序結(jié)束時觸發(fā) |
Session_Start | 某用戶第一訪問時觸發(fā) |
Session_End | 某用戶退出應用程序時觸發(fā) |
public class Global : System.Web.HttpApplication { //1.服務(wù)器開啟 protected void Application_Start(object sender, EventArgs e) { Application.Lock();//鎖定訪問 Application["Uservisit"] = 0;//網(wǎng)站的被訪問的次數(shù) Application["CurrentUsers"] = 0;//在線人數(shù) Application.UnLock();//取消鎖定 } //4.客戶端首次訪問 protected void Session_Start(object sender, EventArgs e) { Application.Lock(); Application["Uservisit"] = (int)Application["Uservisit"] + 1; Application["CurrentUsers"] = (int)Application["CurrentUsers"] + 1; Application.UnLock(); } //5.客戶端退出訪問結(jié)束會話 protected void Session_End(object sender, EventArgs e) { //在web.config文件中把SessionState模式設(shè)置為InPro時才會已發(fā)此事件 Application.Lock(); Application["CurrentUsers"] = (int)Application["CurrentUsers"] - 1; Application.UnLock(); } //2.服務(wù)器開始接收請求 protected void Application_BeginRequest(object sender, EventArgs e) { } //3.服務(wù)器開始處理請求 protected void Application_AuthenticateRequest(object sender, EventArgs e) { } //錯誤日志記錄 protected void Application_Error(object sender, EventArgs e) { } //6.服務(wù)器結(jié)束 protected void Application_End(object sender, EventArgs e) { } }
5.Application工作原理圖
八、Server對象
Server對象是HttpServerUtility的一個實例,它提供了對服務(wù)器上方法和屬性訪問,用于訪問服務(wù)器上的資源。
1.屬性
MarhineName:獲取服務(wù)器的計算機名稱
ScriptTimeout:獲取和設(shè)置請求超時值
2.方法
Execute:在當前請求的上下文中執(zhí)行指定資源的處理程序,然后將控制返回給處理程序
HtmlDecode:對已被編碼以消除無效的HTML字符的字符串進行解碼
HtmlEncode:對要在瀏覽器中顯示的字符進行編碼
MapPath:返回與web服務(wù)器上的指定虛擬路徑相對應的物理文件路徑
UrlDecode:對字符串進行解碼,該字符串為了進行HTTP傳輸而編碼并在URL中發(fā)送到服務(wù)器
UrlEncode:編碼字符串,以便通過URL從Web服務(wù)器到客戶端經(jīng)行可靠的HTTP傳輸
Transfer:終止當前頁的執(zhí)行,并為當前請求開始執(zhí)行新頁
九、ASP.NET常用對象比較
| 對象名稱 |
存儲位置 | 有效時間 | 信息共享范圍 |
---|---|---|
Request/Response | 請求和響應的過程中 | 請求結(jié)束之前 |
ViewState | 被請求的頁面中 | 頁面關(guān)閉之前 |
Session | Web服務(wù)器端 | 規(guī)定的時間內(nèi) |
Cookie | 客戶端硬盤中 | 規(guī)定的時間內(nèi) |
Application | Web服務(wù)器端 | IIS重啟之前 |
在VS上按F1
鍵,進入微軟官方幫助文檔,可查看其它更多內(nèi)置對象
到此這篇關(guān)于不可或缺的ASP.NET內(nèi)置對象小結(jié)的文章就介紹到這了,更多相關(guān)ASP.NET 內(nèi)置對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET Core設(shè)置URLs的方法匯總(完美解決.NET 6項目局域網(wǎng)IP地址遠程無法訪問的
近期在dotnet項目中遇到這樣的問題.net6 運行以后無法通過局域網(wǎng)IP地址遠程訪問,整理出解決問題的五種方式方法,感興趣的朋友一起看看吧2023-11-11在ASP.NET2.0中通過Gmail發(fā)送郵件的代碼
我們有時候需要發(fā)送郵件給訪問網(wǎng)頁的用戶,例如,注冊的時候,發(fā)一確認信什么的。那么,在ASP.NET2.0中該如果操作呢?2008-06-06.NET開發(fā)基礎(chǔ):從簡單的例子理解泛型 分享
.Net開發(fā)基礎(chǔ)系列文章,對自己之前寫過的代碼備忘,如能給人予幫助,不甚榮幸。個人能力有限,如有差錯或不足,請及時指正。2013-06-06asp.net導出excel數(shù)據(jù)的常見方法匯總
這篇文章主要介紹了asp.net導出excel數(shù)據(jù)的常見方法,實例匯總了數(shù)據(jù)導出的常見的方法以及相關(guān)的注意事項,是非常實用的技巧,需要的朋友可以參考下2014-10-10詳解ASP.NET Core 處理 404 Not Found
這篇文章主要介紹了詳解ASP.NET Core 處理 404 Not Found,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10