ASP.NET MVC5基礎 - Global.asax詳解

簡介

global.asax是一個文本文件,它提供全局可用代碼唯卖。這些代碼包括應用程序的事件處理程序以及會話事件眠寿、方法和靜態(tài)變量。有時該文件也被稱為應用程序文件山憨。

Global.asax 文件繼承自 HttpApplication 類查乒,global.asax 文件中的任何代碼都是它所在的應用程序的一部分。每個應用程序在其根目錄下只能有一個global.asax文件郁竟。不過這個文件是可選的侣颂,如果刪除掉global.asax文件,應用程序?qū)λ惺录糜?HttpApplication類提供的默認行為枪孩,不會出現(xiàn)問題憔晒。

作用

Global.asax文件主要用來處理更高級別的應用程序事件藻肄,如Application_Start、Application_End拒担、Session_Start嘹屯、Session_End等。

Global.asax文件中的事件从撼,幾乎涵蓋了應用程序運行的任何節(jié)點州弟。你可以在應用程序啟動、應用程序遇到異常低零、用戶會話超時等節(jié)點添加處理事件婆翔。

Global.asax的處理事件

Global.asax 文件包含以下事件:

函數(shù)名 說明
Application_Init 在應用程序被實例化或第一次被調(diào)用時,該事件被觸發(fā)掏婶。對于所有的HttpApplication 對象實例啃奴,它都會被調(diào)用。
Application_Disposed 在應用程序被銷毀之前觸發(fā)雄妥。這是清除以前所用資源的理想位置最蕾。
Application_Error 當應用程序中遇到一個未處理的異常時,該事件被觸發(fā)老厌。
Application_Start 在HttpApplication 類的第一個實例被創(chuàng)建時瘟则,該事件被觸發(fā)。它允許你創(chuàng)建可以由所有HttpApplication 實例訪問的對象枝秤。
Application_End 在HttpApplication 類的最后一個實例被銷毀時醋拧,該事件被觸發(fā)。在一個應用程序的生命周期內(nèi)它只被觸發(fā)一次淀弹。
Application_BeginRequest 在接收到一個應用程序請求時觸發(fā)趁仙。對于一個請求來說,它是第一個被觸發(fā)的事件垦页,請求一般是用戶輸入的一個頁面請求(URL)雀费。
Application_EndRequest 針對應用程序請求的最后一個事件。
Application_PreRequestHandlerExecute 在 ASP.NET 頁面框架開始執(zhí)行諸如頁面或 Web 服務之類的事件處理程序之前痊焊,該事件被觸發(fā)盏袄。
Application_PostRequestHandlerExecute 在 ASP.NET 頁面框架結束執(zhí)行一個事件處理程序時,該事件被觸發(fā)薄啥。
Applcation_PreSendRequestHeaders 在 ASP.NET 頁面框架發(fā)送 HTTP 頭給請求客戶(瀏覽器)時辕羽,該事件被觸發(fā)。
Application_PreSendContent 在 ASP.NET 頁面框架發(fā)送內(nèi)容給請求客戶(瀏覽器)時垄惧,該事件被觸發(fā)刁愿。
Application_AcquireRequestState 在 ASP.NET 頁面框架得到與當前請求相關的當前狀態(tài)(Session 狀態(tài))時,該事件被觸發(fā)到逊。
Application_ReleaseRequestState 在 ASP.NET 頁面框架執(zhí)行完所有的事件處理程序時铣口,該事件被觸發(fā)滤钱。這將導致所有的狀態(tài)模塊保存它們當前的狀態(tài)數(shù)據(jù)。
Application_ResolveRequestCache 在 ASP.NET 頁面框架完成一個授權請求時脑题,該事件被觸發(fā)件缸。它允許緩存模塊從緩存中為請求提供服務,從而繞過事件處理程序的執(zhí)行叔遂。
Application_UpdateRequestCache 在 ASP.NET 頁面框架完成事件處理程序的執(zhí)行時他炊,該事件被觸發(fā),從而使緩存模塊存儲響應數(shù)據(jù)已艰,以供響應后續(xù)的請求時使用痊末。
Application_AuthenticateRequest 在安全模塊建立起當前用戶的有效的身份時,該事件被觸發(fā)哩掺。在這個時候凿叠,用戶的憑據(jù)將會被驗證。
Application_AuthorizeRequest 當安全模塊確認一個用戶可以訪問資源之后疮丛,該事件被觸發(fā)幔嫂。
Session_Start 在一個新用戶訪問應用程序 Web 站點時辆它,該事件被觸發(fā)誊薄。
Session_End 在一個用戶的會話超時、結束或他們離開應用程序 Web 站點時锰茉,該事件被觸發(fā)呢蔫。

實例說明

我們以Application_Error(程序遇到未處理的異常時觸發(fā))事件做一個實例說明。我們現(xiàn)在GLobal.asax文件中注冊Application_Error事件飒筑,如下:

protected void Application_Error(object sender, EventArgs e)
{
    //獲取前一個觸發(fā)到的異常信息
    Exception ex = Server.GetLastError().GetBaseException();
    //將前一個異常信息清除片吊。不清除會觸發(fā)錯誤詳情頁(黃頁)。
    Server.ClearError();
    //將錯誤信息返回到客戶端
    Response.Write("Error:" + ex.Message);
}

當應用程序觸發(fā)未處理的異常時协屡,會觸發(fā)該事件俏脊。我們在事件中會給前臺返回一個錯誤消息。

然后我們在上篇文章創(chuàng)建的MVC測試項目中肤晓,添加一個Action方法爷贫。

我們請求這個Action,顯示如下界面:


需要注意的是补憾,我們在Application_Error事件中漫萄,必須將捕獲到的Error清除掉,也就是這行代碼:Server.ClearError();盈匾。否則將會引發(fā)ASP.Net的詳細錯誤頁面(俗稱黃頁)腾务。

總結

本文我們了解到了Global.asax文件的作用以及包含的處理事件,我們根據(jù)Application_Error實例能大概了解到事件的使用方法削饵。在實際項目中岩瘦,我們可以使用Global.asax統(tǒng)一管理應用程序中注冊未巫、登錄、異常等等事件担钮,這樣可以使我們的應用程序更加規(guī)范橱赠,更加易于管理。更多內(nèi)容可關注我的博客箫津。

更多內(nèi)容可訪問我的個人博客:http://www.yunc.top/

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狭姨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苏遥,更是在濱河造成了極大的恐慌饼拍,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件田炭,死亡現(xiàn)場離奇詭異师抄,居然都是意外死亡,警方通過查閱死者的電腦和手機教硫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門叨吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞬矩,你說我怎么就攤上這事茶鉴。” “怎么了景用?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵涵叮,是天一觀的道長。 經(jīng)常有香客問我伞插,道長割粮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任媚污,我火速辦了婚禮舀瓢,結果婚禮上,老公的妹妹穿的比我還像新娘耗美。我一直安慰自己京髓,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布幽歼。 她就那樣靜靜地躺著朵锣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甸私。 梳的紋絲不亂的頭發(fā)上诚些,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音,去河邊找鬼诬烹。 笑死砸烦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绞吁。 我是一名探鬼主播幢痘,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼家破!你這毒婦竟也來了颜说?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汰聋,失蹤者是張志新(化名)和其女友劉穎门粪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烹困,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡玄妈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了髓梅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拟蜻。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枯饿,靈堂內(nèi)的尸體忽然破棺而出酝锅,到底是詐尸還是另有隱情,我是刑警寧澤鸭你,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布屈张,位于F島的核電站擒权,受9級特大地震影響袱巨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碳抄,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一愉老、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剖效,春花似錦嫉入、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爷光,卻和暖如春垫竞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工欢瞪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留活烙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓遣鼓,卻偏偏與公主長得像啸盏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骑祟,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容