Global.asax是我們的底層文件,第一次的IIS請求都會先去執行它里面的文件,所以學會它里面的函數是非常有必要的。而且我們總是忽略這里的知識點,總覺得這是不必須的,其實我們錯了,這里才是程序的根本。
文件代碼:
/// <summary> /// 所有的應用,狀態,程序被訪問,用戶退出,都可以找到。, /// </summary> public class Global : System.Web.HttpApplication { /// <summary> /// 這里是IIS請求一開始執行,就執行一遍這個方法。后面還有個Application_End方法。 /// </summary> /// 程序啟動的時候都會執行這個函數(一次),相當於Main函數, /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Start(object sender, EventArgs e) { File.AppendAllText("c:/1.txt",DateTime.Now.ToString()+"Application_Start"); } /// <summary> /// 這里的Session是服務器端為每一個瀏覽器保存數據開辟的臨時存儲空間,當瀏覽器關閉或者切換用戶就會重新開辟內存來保存Session /// 每一個瀏覽器的訪問網頁都會有一個有一個Session /// 一個瀏覽器的一個用戶公用了一個Session ,當用戶主動退出的時候 /// </summary> /// 統計當前在線人數 /// <param name="sender"></param> /// <param name="e"></param> protected void Session_Start(object sender,EventArgs e) { //這里相當於建立的臨時會話一樣。 HttpContext.Current.Session.Abandon();//銷毀Session ,15分鍾自動取消 } /// <summary> /// 請求的時候做一些處理。(每一個應用都會觸發這里) /// </summary> /// <param name="sender"></param> /// 查看當前請求的URL,通過這個(HttpContext.Current.Request.URL)在 /// 快速監聽里面查看總共請求了哪些URL /// <param name="e"></param> protected void Application_BeginRequest(object sender,EventArgs e) { //實現功能,屏蔽IP if (HttpContext.Current.Request.UserHostAddress== "192.168.1.102") { HttpContext.Current.Response.Write("這里就可以把自己電腦的IP地址屏蔽掉了。"); } else { HttpContext.Current.Response.Write(""); } //防盜獵 } protected void Application_AuthentiateRequest(object sender,EventArgs e) { } /// <summary> /// 異常的處理模塊 /// </summary> /// 調用這里的函數來曝出異常信息 /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Error(object sender,EventArgs e) { } /// <summary> /// 斷開會話,15超時的時候調用這個 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Session_End(object sender,EventArgs e) { } /// <summary> /// 程序被關閉的時候執行一次,IIS被關閉才執行。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_End(object sender,EventArgs e) { } }
函數的說明:
Global.asax這個文件是執行IIS請求必進過的文件,是非常重要。對於Web應用而言是聲明周期的一個事件響應的地方。 Global類,它繼承自System.Web.HttpApplication,它的作用是定義 ASP.NET 應用程序中的所有應用程序對象共有的方法、屬性和事件。 此類是用戶在 Global.asax 文件中所定義的應用程序的基類。*:Application_Start() 此函數是我們程序剛啟動的時候調用的函數,相當於我們C語言時候的Main函數一樣,都是程序一開始執行的函數,可以將一些需要初始化的函數,方法,寫在這里,比如路由,日志,IOC,DI,區域,文件等,關閉的時候有個對應的方法Application_End()函數
protected void Application_Start() { EngineContext.Initialize(false); var dependencyResolver = new ControllerDependencyResolver(); DependencyResolver.SetResolver(dependencyResolver); GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver; AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
protected void Application_End(object sender,EventArgs e) { }
*:Application_Error() 異常處理函數,當應用程序中出現未捕獲的異常,此函數被調用,這里用HttpContext.Current.Server.GetLastError()來獲得異常信息,可以將其保存到log4Net記錄到日志中。
protected void Application_Error(object sender, EventArgs e) { var exception = Server.GetLastError(); LogException(exception); }
*:Session_Start() 服務端Session信息,這里是每一個瀏覽器去訪問服務器,服務器都會為其創建內存空間,即Session來保存它的一些信息,我們打開的一些網頁都在 一個Session中進行訪問。(好像是15分鍾自動掉線,相當於一次時間有限的會話。)一個瀏覽器的一個用戶公用一個Session,當用戶主動退出的 時候Session就會被關閉,調用下面的函數來關閉它,Session_End()。可以在它里面來統計當前在線人數等。
HttpContext.Current.Session.Abandon();//銷毀Session ,15分鍾自動取消
protected void Session_Start(object sender,EventArgs e) { //這里相當於建立的臨時會話一樣。 HttpContext.Current.Session.Abandon();//銷毀Session ,15分鍾自動取消 }
protected void Session_End(object sender,EventArgs e) { }
*:Application_BeginRequest() 請求的時候都會訪問這個函數,每一個應用也會觸發這里,我們可以通過下面的函數來查看當前的請求URL, (HttpContext.Current.Request.URL)。可以在快速監聽里面進行查看。看一個網頁總共請求了幾次URL。在這里可以屏蔽 IP,防盜獵圖片等功能。
protected void Application_BeginRequest(object sender,EventArgs e) { //實現功能,屏蔽IP if (HttpContext.Current.Request.UserHostAddress== "192.168.1.102") { HttpContext.Current.Response.Write("這里就可以把自己電腦的IP地址屏蔽掉了。"); } else { HttpContext.Current.Response.Write(""); } //防盜獵 }
*:這個函數我也不是很清楚,等以后學習的時候在補吧。
protected void Application_AuthentiateRequest(object sender,EventArgs e) { }