[ASP.NET]Global.asax事件筆記_實際應用例子_停用 TLS 1.0_檔案上傳大小頁面跳轉_錯誤紀錄處理
Application_Init:在應用程序被實例化或第一次被調用時,該事件被觸發。對於所有的HttpApplication 對象實例,它都會被調用。
Application_Disposed:在應用程序被銷燬之前觸發。這是清除以前所用資源的理想位置。
Application_Error:當應用程序中遇到一個未處理的異常時,該事件被觸發。
Application_Start:在HttpApplication 類的第一個實例被創建時,該事件被觸發。它允許你創建可以由所有HttpApplication 實例訪問的對象。
Application_End:在HttpApplication 類的最後一個實例被銷燬時,該事件被觸發。在一個應用程序的生命週期內它只被觸發一次。
Application_BeginRequest:在接收到一個應用程序請求時觸發。對於一個請求來說,它是第一個被觸發的事件,請求一般是用戶輸入的一個頁面請求(URL)。
Application_EndRequest:針對應用程序請求的最後一個事件。
Application_PreRequestHandlerExecute:在 ASP.NET 頁面框架開始執行諸如頁面或 Web 服務之類的事件處理程序之前,該事件被觸發。
Application_PostRequestHandlerExecute:在 ASP.NET 頁面框架結束執行一個事件處理程序時,該事件被觸發。
Applcation_PreSendRequestHeaders:在 ASP.NET 頁面框架發送 HTTP 頭給請求客戶(瀏覽器)時,該事件被觸發。
Application_PreSendContent:在 ASP.NET 頁面框架發送內容給請求客戶(瀏覽器)時,該事件被觸發。
Application_AcquireRequestState:在 ASP.NET 頁面框架得到與當前請求相關的當前狀態(Session 狀態)時,該事件被觸發。
Application_ReleaseRequestState:在 ASP.NET 頁面框架執行完所有的事件處理程序時,該事件被觸發。這將導致所有的狀態模塊保存它們當前的狀態數據。
Application_ResolveRequestCache:在 ASP.NET 頁面框架完成一個授權請求時,該事件被觸發。它允許緩存模塊從緩存中爲請求提供服務,從而繞過事件處理程序的執行。
Application_UpdateRequestCache:在 ASP.NET 頁面框架完成事件處理程序的執行時,該事件被觸發,從而使緩存模塊存儲響應數據,以供響應後續的請求時使用。
Application_AuthenticateRequest:在安全模塊建立起當前用戶的有效的身份時,該事件被觸發。在這個時候,用戶的憑據將會被驗證。
Application_AuthorizeRequest:當安全模塊確認一個用戶可以訪問資源之後,該事件被觸發。
Session_Start:在一個新用戶訪問應用程序 Web 站點時,該事件被觸發。
Session_End:在一個用戶的會話超時、結束或他們離開應用程序 Web 站點時,該事件被觸發。
Application_Error 事件顯示一個簡單的消息用以說明發生的錯誤。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security; using System.Web; using System.Web.Security; using System.Web.SessionState; namespace ScrapApp { public class Global : System.Web.HttpApplication { //https://www.ithome.com.tw/news/126434 //https://tools.ietf.org/html/draft-ietf-tls-oldversions-deprecate-00 /// <summary> /// 在應用程式啟動時執行的程式碼 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Start(object sender, EventArgs e) { const System.Security.Authentication.SslProtocols _Tls12 = (System.Security.Authentication.SslProtocols)0x00000C00; const System.Net.SecurityProtocolType Tls12 = (System.Net.SecurityProtocolType)_Tls12; System.Net.ServicePointManager.SecurityProtocol = Tls12; } /// <summary> /// 應用程式關閉時執行的程式碼 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_End(object sender, EventArgs e) { } /// <summary> /// 發生未處理錯誤時執行的程式碼 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_BeginRequest(object sender, EventArgs e) { //檔案上傳過大超出設定限制導入自訂錯誤頁 System.Web.Configuration.HttpRuntimeSection section = (System.Web.Configuration.HttpRuntimeSection)System.Configuration.ConfigurationManager.GetSection("system.web/httpRuntime"); int maxFileSize = section.MaxRequestLength * 1024; //單位:kb if(Request.ContentLength > maxFileSize) { Response.Redirect(Server.MapPath("~/ErrorPages/SizeError.aspx")); } } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { HttpServerUtility server = HttpContext.Current.Server; HttpRequest request = HttpContext.Current.Request; HttpSessionState session = HttpContext.Current.Session; HttpBrowserCapabilities brower = HttpContext.Current.Request.Browser; Exception ex = server.GetLastError(); System.Net.IPAddress ServerIP = new System.Net.IPAddress(System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].Address); StreamWriter sw = null; try { if (ex.InnerException != null) { ex = ex.InnerException; } string filePath = string.Format(@"{0}Log\err_log_" + DateTime.Now.ToString("yyyyMMdd") + ".txt", server.MapPath("~/")); sw = File.Exists(filePath) ? new StreamWriter(filePath, true) : File.CreateText(filePath); sw.WriteLine("----------[目前時間:" + DateTime.Now.ToString() + "]----------"); sw.WriteLine("事件發生網頁網址:" + request.Url); sw.WriteLine("事件發生路徑:" + request.Path); sw.WriteLine("例外狀況訊息:" + ex.Message); //事件發生網頁網址 sw.WriteLine("例外堆疊:" + ex.StackTrace); sw.WriteLine("造成錯誤的程式名稱:" + ex.Source); //使用者名稱 if (session != null) sw.WriteLine("使用者名稱:" + Session["UserID"].ToString()); sw.WriteLine("識別系統別:" + request.UserHostAddress); sw.WriteLine("IP:" + ServerIP.ToString()); sw.WriteLine("使用瀏覽器:" + brower.Type); sw.WriteLine("是否支援Cookie:" + (brower.Cookies ? "是" : "否")); sw.WriteLine("伺服器名稱:" + request.ServerVariables["SERVER_NAME"]); } catch (HttpException HE) { throw HE; } catch (ArgumentNullException ANE) { throw ANE; } catch (ArgumentException AE) { throw AE; } catch (UnauthorizedAccessException UAE) { throw UAE; } catch (DirectoryNotFoundException DNFE) { throw DNFE; } catch (IOException IOE) { throw IOE; } catch (SecurityException SE) { throw SE; } finally { sw.Close(); sw.Dispose(); } } } } |
留言
張貼留言