如何在ASP.NET應(yīng)用程序中初始化(6)_ASP教程
推薦:程序員看淘寶,如何用Session保存用戶狀態(tài)網(wǎng)上購(gòu)物已經(jīng)成為現(xiàn)在生活不可缺少的一部分。我們上淘寶只是為了消費(fèi),今天換一個(gè)角度,用程序員的眼光看看淘寶。 如上圖: 情況一:當(dāng)打開(kāi)一些和賬戶有關(guān)的網(wǎng)頁(yè),檢測(cè)用戶沒(méi)有登錄,系統(tǒng)自動(dòng)會(huì)跳轉(zhuǎn)到登錄界面。 情況二:當(dāng)檢測(cè)到已經(jīng)有用戶登錄,頁(yè)面會(huì)自動(dòng)跳轉(zhuǎn)到目的
前面介紹了4種在ASP.NET執(zhí)行初始化的方法,你或許想知道它們到底有哪些區(qū)別呢?
由于它們都能實(shí)現(xiàn)初始化的操作,它們的差別也只有執(zhí)行的時(shí)刻不同而已,我們可以用簡(jiǎn)單的方法區(qū)分它們的調(diào)用位置:看異常的調(diào)用堆棧信息。
AppInitialize方法異常時(shí)的調(diào)用堆棧信息:
HttpModule異常時(shí)的調(diào)用堆棧信息:
PreApplicationStartMethodAttribute異常時(shí)的調(diào)用堆棧信息:
Global.asax的Application_Start事件處理器的調(diào)用方式則不同,ASP.NET采用了反射調(diào)用,當(dāng)異常發(fā)生只保留了內(nèi)部異常,我們看不到調(diào)用堆棧(不信的話,自己去試試)。
沒(méi)關(guān)系,既然ASP.NET不告訴我們調(diào)用堆棧信息,我們自己也可以去取,請(qǐng)看下面的代碼:
- void Application_Start()
- {
- System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace();
- System.IO.File.WriteAllText("h:\\Application_Start_stack.txt", stack.ToString());
- }
再打開(kāi)文件看一下吧。
說(shuō)明:Global.asax的Application_Start事件處理器還有幾種等效的方法:
- // 這二個(gè)方法都可以實(shí)現(xiàn)與Application_Start(object sender, EventArgs e)相同的行為。
- void Application_OnStart()
- {
- }
- void Application_Start()
- {
- }
根據(jù)以上分析,可以可以得知:
1. AppInitialize和PreApplicationStartMethodAttribute指向的方法被調(diào)用的時(shí)機(jī)發(fā)生在ASP.NET創(chuàng)建宿主環(huán)境時(shí),屬于比較早的時(shí)刻。
2. Application_Start和HttpModule的調(diào)用時(shí)刻要晚一點(diǎn)。
這個(gè)結(jié)論有用嗎?
其實(shí)我也感覺(jué)意義不大,不過(guò)分析它僅僅為了滿足我的求知欲和好奇心而已,你是否也有這樣的好奇心呢?
如果你仍然好奇想知道這4種方法的執(zhí)行時(shí)機(jī)的先后順序,我也能告訴你:
1. PreApplicationStartMethodAttribute指向的方法。
2. App_Code中的appInitialize方法。
3. Application_Start。
4. HttpModule
再補(bǔ)充一點(diǎn):在開(kāi)發(fā)環(huán)境中,當(dāng)我們編譯網(wǎng)站時(shí),PreApplicationStartMethodAttribute指向的方法可能會(huì)被調(diào)用,這處決于類(lèi)庫(kù)的程序集是否發(fā)生了修改。
到底該選擇哪種初始化方法?
今天給大家介紹了4種在ASP.NET中執(zhí)行初始化的方法,或許有些人會(huì)想:到底該選擇哪種初始化方法呢?
的確,方法越多越讓人迷惑。
下面的觀點(diǎn)僅代表我個(gè)人的建議,你也可以根據(jù)自己的喜好來(lái)選擇。
1. 優(yōu)先選擇Application_Start(雖然IIS的經(jīng)典模式下需要多寫(xiě)點(diǎn)代碼),因?yàn)槿魏稳苏页跏蓟a時(shí)都會(huì)想到那里,便于其他人維護(hù)。
2. AppInitialize方法雖然使用簡(jiǎn)單,但它并不適合于WebApplication項(xiàng)目。
3. PreApplicationStartMethodAttribute只支持ASP.NET 4.0以上版本,且尤其適合于類(lèi)庫(kù)的內(nèi)部初始化。
4. 當(dāng)以上方法都不可行時(shí),HttpModule將成為最后的救命稻草,它適合所有ASP.NET版本。
分享:ASP.NET七大身份驗(yàn)證方式及解決方案在B/S系統(tǒng)開(kāi)發(fā)中,經(jīng)常需要使用身份驗(yàn)證。因?yàn)閣eb應(yīng)用程序非常特殊,和傳統(tǒng)的C/S程序不同,默認(rèn)情況下(不采用任何身份驗(yàn)證方式和權(quán)限控制手段),當(dāng)你的程序在互聯(lián)網(wǎng)/局域網(wǎng)上公開(kāi)后,任何人都能夠訪問(wèn)你的web應(yīng)用程序的資源,這樣很難保障應(yīng)用程序安全性。通俗點(diǎn)來(lái)說(shuō):
- 程序員看淘寶,如何用Session保存用戶狀態(tài)
- ASP.NET七大身份驗(yàn)證方式及解決方案
- 8 種提升 ASP.NET Web API 性能的方法
- asp.net計(jì)算每個(gè)頁(yè)面執(zhí)行時(shí)間的方法
- asp實(shí)現(xiàn)獲取MSSQL數(shù)據(jù)庫(kù)表指定條件行數(shù)的函數(shù)
- asp實(shí)現(xiàn)讀取數(shù)據(jù)庫(kù)輸出json代碼
- JScript中遍歷Request表單參數(shù)集合的方法
- 如何使用ASP建立虛擬的FTP服務(wù)器
- 用ASP+CSS實(shí)現(xiàn)隨機(jī)背景
- 簡(jiǎn)述Xml.Serialization如何序列化對(duì)象到XML文件
- 如何過(guò)濾html中的回車(chē)空格
- ASP中的EVAL函數(shù)使用教程
ASP教程Rss訂閱編程教程搜索
ASP教程推薦
- .net中如何給數(shù)據(jù)表實(shí)體類(lèi)賦值的方法
- Asp讀取文本文件并顯示
- ASP中的面向?qū)ο?類(lèi)
- ASP技巧實(shí)例:ASP實(shí)現(xiàn)最簡(jiǎn)潔的多重查詢的解決方案
- Asp定時(shí)執(zhí)行操作、Asp定時(shí)讀取數(shù)據(jù)庫(kù)(網(wǎng)頁(yè)定時(shí)操作詳解)
- 解析asp中提取HTML中圖片的SRC路徑
- 瞄準(zhǔn)Apache IIS7向開(kāi)源張開(kāi)雙臂
- ASP獲取到的系統(tǒng)時(shí)間有上午,下午的解決方法
- asp如何設(shè)置cookies過(guò)期時(shí)間
- 入門(mén):初學(xué)ASP動(dòng)態(tài)網(wǎng)頁(yè)制作常用錯(cuò)誤處理
- 相關(guān)鏈接:
- 教程說(shuō)明:
ASP教程-如何在ASP.NET應(yīng)用程序中初始化(6)。