ASP.NET中HttpApplication中ProcessRequest方法中運行的事件順序;ASP.NET WebForm和MVC總體請求流程圖


ASP.NET中HttpApplication中ProcessRequest方法中運行的事件順序

1.BeginRequest  開始處理請求

2.AuthenticateRequest 授權驗證請求,獲取用戶授權信息
3.PostAuthenticateRequest 獲取成功
4.AunthorizeRequest 授權,一般來檢查用戶是否獲得權限
5.PostAuthorizeRequest 獲得授權
6.ResolveRequestCache 獲取頁面緩存結果(假設沒有則運行)
7.PostResolveRequestCache 已獲取緩存
8.PostMapRequestHandler 創建頁面對象
9.AcquireRequestState 獲取Session -- 先推斷當前頁面對象是否實現了IRequiresSessionState接口,假設實現了,則從瀏覽器發來的請求報文頭中獲得SessionId,並到server的 Session池中獲得相應的Session對象,最后賦值給 HttpContext的Session屬性。
10.PostAcquireRequestState 獲得Session
11.PreRequestHandlerExecute 准備運行頁面對象
×運行頁面對象的ProcessRequest方法(1.ashx,1.aspx)。假設請求的是1.aspx。則會運行頁面生命周期
12.PostRequestHandlerExecute 運行完頁面對象了
13.ReleaseRequestState 釋放請求狀態
14.PostReleaseRequestState 已釋放請求狀態
15.UpdateReuqestCache 更新緩存
16.PostUpdateRequestCache 已更新緩存
17.LogRequest 日志記錄
18.PostLogRequest 已完畢日志

19.EndRequest 完畢


能夠再Global.asax中加入以Application_為前綴+事件名 的方法運行測試!比如:

 public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);  
        }

    
        public void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication obj = sender as HttpApplication;
            obj.Context.Response.Write("1 Application_BeginRequest<br/>");
        }


        public void Application_ResolveRequestCache(object sender, EventArgs e)
        {
            HttpApplication obj = sender as HttpApplication;
            obj.Context.Response.Write("6 Application_ResolveRequestCache<br/>");
        }

        public void Application_PostResolveRequestCache(object sender, EventArgs e)
        {
            HttpApplication obj = sender as HttpApplication;
            obj.Context.Response.Write("7 Application_PostResolveRequestCache<br/>");
        }
        public void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            HttpApplication obj = sender as HttpApplication;
            obj.Context.Response.Write("11 Application_PreRequestHandlerExecute<br/>");
        }
    }
}


下面附上MVC總體請求流程圖。來自傳智播客黑馬培訓班


ASP.NET WebForm總體請求流程圖,來自傳智播客黑馬培訓班




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM