成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解ASP.NET MVC應用程序請求生命周期

開發(fā) 后端
本文將介紹的是ASP.NET MVC應用程序的請求生命周期,包括相應的流程圖及步驟,希望能對大家有所幫助。

當一個ASP.NET MVC應用程序提出請求,為了響應請求,包含一些請求執(zhí)行流程步驟! 在ASP.NET MVC應用程序Http request

和Http response 過程中,主要包含8個步驟:

 

1)RouteTable(路由表)的創(chuàng)建

 

2)UrlRoutingModule 請求攔截

 

3)Routing engine 確定route

 

4)route handler 創(chuàng)建相關的IHttpHandler實例

 

5)IHttpHandler實例確定Controller(控制器)

 

6)Controller執(zhí)行

 

7)一個視圖引擎創(chuàng)建

 

8) 視圖呈現(xiàn)

 

主要流程圖如下:

 

   主要流程圖

1)RouteTable的創(chuàng)建

RouteTable的創(chuàng)建發(fā)生在mvc應用程序的啟動 或者web應用程序池的重啟!通常的asp.net程序,一個頁面請求對應磁盤上的一個頁面!如(http://localhost/index.aspx

 

 對應到服務器磁盤上的文件index.aspx)index.aspx實際上是一個類,由IHttpHandler創(chuàng)建實例化。IHttpHandler包含一個

 

 ProcessRequest方法,負責響應頁面輸出!

 

但是mvc application 是不同的,每一個請求映射到route,route 定義在route table,在應用程序啟動時創(chuàng)建!

RouteTable的在應用程序的具體使用如下

  1. public class MvcApplication : System.Web.HttpApplication  
  2.   {  
  3.   public static void RegisterRoutes(RouteCollection routes)  
  4.   {  
  5.   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
  6.  
  7.   routes.MapRoute(  
  8.   "Default",  // Route name  
  9.   "{controller}/{action}/{id}",   // URL with parameters  
  10.   new { controller = "Home"action = "Index"id = "" }  // Parameter defaults  
  11.   );  
  12.   routes.MapRoute(  
  13.  "Account",  // Route name  
  14.  "{controller}/{action}/{id}",   // URL with parameters  
  15.  new { controller = "Account"action = "LogOn"id = "" }  // Parameter defaults  
  16.  );  
  17.    
  18.   }  
  19.  
  20.   protected void Application_Start()  
  21.   {  
  22.   RegisterRoutes(RouteTable.Routes);  
  23.   }  
  24.   } 

2)UrlRoutingModule 請求攔截

每一個Http 請求 都被UrlRoutingModule攔截,UrlRoutingModule提供了當前的HttpContext的routing engine(路由引擎)。HttpContext實例包含當前請求的所有數(shù)據(jù)。UrlRoutingModule控制著routing engine,提供了HttpContext數(shù)據(jù)到routing engine! UrlRoutingModule實現(xiàn)了IHttpModule接口,在web.config 文件進行了注冊!

 

UrlRoutingModule 具體的數(shù)據(jù)結(jié)構如下:

  1. public class UrlRoutingModule : IHttpModule  
  2.   {  
  3.    // 主要的 Methods  
  4.    protected virtual void Init(HttpApplication application);  
  5.    private void OnApplicationPostMapRequestHandler(object sender, EventArgs e);  
  6.    private void OnApplicationPostResolveRequestCache(object sender, EventArgs e);  
  7.    public virtual void PostMapRequestHandler(HttpContextBase context);  
  8.    public virtual void PostResolveRequestCache(HttpContextBase context);  
  9.    void IHttpModule.Init(HttpApplication application);  
  10.  
  11.    // Properties  
  12.    public RouteCollection RouteCollection { get; set; }  
  13.  
  14.    }  
  15. UrlRoutingModule 在WebConfig的注冊  
  16.    <httpModules> 
  17. <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, 
  18. System.Web.Routing, Version=3.5.0.0, 
  19.  Culture=neutral,PublicKeyToken=31BF3856AD364E35"/> 
  20.    </httpModules> 
 
 

3)Routing engine 確定route

routing engine基于當前HttpContext確定Route的處理。routing engine 指出route table里面匹配的route ,并在IRouteHandler實例創(chuàng)建route處理!

 

4)route handler 創(chuàng)建相關的IHttpHandler實例在route table里,每一個route 都與一個IHttpHandler對應。IHttpHandler基于當前的HttpContext數(shù)據(jù)負責創(chuàng)建一個Controller(控制器)!IHttpHandler是由當前活動的IRouteHandler的GetHttpHandler所創(chuàng)建!

 

具體的細節(jié)如下

  1. public interface IRouteHandler  
  2. {  
  3. // Methods  
  4. IHttpHandler GetHttpHandler(RequestContext requestContext);  
 

5)IHttpHandler實例確定Controller(控制器)

 在MVC應用程序中,MvcHandler實現(xiàn)了IHttpHandler,Controller實例,是基于所輸入的HttpContext 和Url參數(shù)與route 對應的,ControllerFactory 創(chuàng)建一個controller,ControllerContext包含上下文數(shù)據(jù),傳入到controller的Excute方法,觸發(fā)controller的邏輯處理!

 

MvcHandler主要有一個ControllerBuilder  _controllerBuilder字段;

具體細節(jié)如下

  1.  public class MvcHandler : IHttpAsyncHandler, IHttpHandler, IRequiresSessionState  
  2. {  
  3. // 主要的Fields  
  4. private ControllerBuilder _controllerBuilder;  
  5. }  
  6. ControllerBuilder類主要有一個方法GetControllerFactory  
  7. public class ControllerBuilder  
  8. {  
  9.   public IControllerFactory GetControllerFactory();  

通過實現(xiàn)IControllerFactory 工廠 創(chuàng)建一個Controller

 

6)Controller執(zhí)行

 所有的controller 邏輯調(diào)用執(zhí)行時,actions請求被執(zhí)行!當controller的邏輯被執(zhí)行時,會返回一個ActionResult。一個ActionResult實例,會觸發(fā)呈現(xiàn)一個View(視圖),當觸發(fā)發(fā)生時,一個視圖引擎被創(chuàng)建,進行進一步的處理

 

7)一個視圖引擎創(chuàng)建

 視圖引擎實例會創(chuàng)建一個IView接口實例,返回一個ViewEngineResult實例,

 

8) 視圖呈現(xiàn)

 IView實例編譯請求視圖,提供Render方法調(diào)用的數(shù)據(jù)!

原文標題:MVC 請求生命周期

鏈接:http://www.cnblogs.com/skyyang/archive/2010/04/02/1702769.html

【編輯推薦】

 

  1. 詳解ASP.NET MVC 2中的Area特性
  2. 專訪微軟MVP衣明志:走進ASP.NET MVC 2框架開發(fā)
  3. 詳解ASP.NET MVC 2中強類型HTML輔助方法
  4. 詳解ASP.NET MVC 2自定義驗證
  5. Scott Gu教你使用ASP.NET MVC 2新功能
責任編輯:彭凡 來源: 博客園
相關推薦

2009-02-12 13:16:55

請求生命周期MVCASP.NET

2009-07-20 10:33:02

ASP.NET MVC

2009-07-23 18:14:17

MVC生命周期

2012-08-16 09:38:38

ASP.NET

2009-07-31 10:47:18

ASP.NET頁面生命

2009-08-10 14:31:46

ASP.NET組件設計ASP.NET控件生命

2009-07-23 13:26:21

2011-08-10 16:50:10

iPhone生命周期

2009-07-23 10:23:44

2013-04-07 10:42:56

Asp.Net頁面周期

2009-07-22 18:02:27

論壇應用程序ASP.NET MVC

2009-07-22 18:07:55

論壇應用程序ASP.NET MVC

2009-07-24 11:25:53

Web應用程序工程ASP.NET MVC

2009-08-04 16:05:15

ASP.NET頁面生命

2009-08-04 16:50:15

ASP.NET頁面生命

2015-07-09 15:42:48

ios應用生命周期

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2009-08-14 17:57:43

ASP.NET MVC

2009-08-03 14:18:40

ASP.NET編程模型ASP.NET頁面生命

2009-06-24 10:34:39

JSF生命周期JSF應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线网站 | 日本精a在线观看 | 麻豆国产一区二区三区四区 | 中文字幕一区二区三区在线观看 | 色婷婷久久久久swag精品 | 亚洲福利网 | 99国产精品99久久久久久 | 色综合一区二区 | jdav视频在线观看免费 | 国产精品久久久 | 国产日韩欧美在线播放 | 国产在线观看 | 欧美日韩网站 | 欧美精品在线一区 | 日韩成人精品一区 | 国产欧美一区二区三区日本久久久 | 黄色片a级 | 久草在线中文888 | 99久久免费精品视频 | 日日夜夜精品视频 | 黄色精品| 亚洲乱码一区二区三区在线观看 | 别c我啊嗯国产av一毛片 | 亚洲精品视频网站在线观看 | 一区二区三区四区在线视频 | 国产乱码精品一区二区三区忘忧草 | 亚洲高清在线 | 人妖一区| 中文字幕一区二区三区四区五区 | 国产91精品在线 | 亚洲视频免费在线观看 | 久久国产精品亚洲 | 成人性生交大片免费看中文带字幕 | 国产亚洲精品美女久久久久久久久久 | www.成人免费视频 | 波多野结衣一区二区三区在线观看 | 久久精品一区 | 国产在线精品一区 | 美女黄视频网站 | 蜜桃av一区二区三区 | 在线激情视频 |