[ASP.NET MVC2 系列] 理解MVC应用程序的执行过程

[ASP.NET MVC2 系列] 
     [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》 
     [ASP.NET MVC2 系列] ASP.Net MVC教程之《ASP.NET MVC 概述》
     [ASP.NET MVC2 系列] 理解MVC应用程序的执行过程
     [ASP.NET MVC2 系列] ASP.NET MVC Routing概述 
     [ASP.NET MVC2 系列] ASP.NET MVC 之如何创建自定义路由约束 
     [ASP.NET MVC2 系列] Action要求与View本质
     [ASP.NET MVC2 系列] Action Filters以及自定义OutputCache ActionFilterAttribute事件发生次序

 

                                            理解MVC应用程序执行过程
 
      基于ASP.NET MVC Web应用程序的请求首先通过一个UrlRoutingModule的对象(HTTP模块)。这个模块匹配请求,并且执行路由选择。这个UrlRoutingModule对象选择第一个匹配当前请求的路由对象。如果没有路径匹配,这个UrlRoutingModule什么也不做,让这个请求返回给常规的ASP.NET或者IIS来请求处理。
 
    从这个被选中的Route对象,UrlRoutingModule对象获得IRouteHandler对象(IRouteHandler对象与Route对象是相互关联的)。一般来说,在一个MVC应用程序中,它将是MvcRouteHandler实例。这个IRouteHandler实例创建一个IHttpHandler对象,并且将它传递给IHttpContext对象。默认情况下,MVC IHttpHandler实例就是MvcHandler对象。然后,这个MvcHandler对象选择controller,controller将最终提交这个请求。


  这个module 和 handler是ASP.NET MVC框架的入口点。它们执行下列行为:
  
  选择合适的controller。
  获得一个具体controller实例。
  调用controller的执行方法。
  
  下表列出了一个MVC Web项目的执行的各阶段。

 

阶段 详细
接收应用程序的第一次请求 在Global.asax文件中, Route对象 被添加到RouteTable对象.
执行路由选择 UrlRoutingModule 模块使用第一个在RouteTable 集合中匹配的Route 对象来创建RouteData对象, 然后它将使用这个RouteData对象来创建RequestContext (IHttpContext)对象.
创建MVC request handler MvcRouteHandler 创建MvcHandler类的一个实例,并且将它传递给RequestContext实例.
创建controller MvcHandler对象使用RequestContext实例来确认IControllerFactory 对象(DefaultControllerFactory类的一个实例) ,以用来创建conteoller实例。
执行controller MvcHandler 实例调用controller的执行method.
调用action 大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.
执行result 一个典型的action 方法可能接收用户输入,准备合适的响应数据, 然后通过返回一个result的类型来执行这个result. 这个内置的能够执行的result 类型 包含以下类型: ViewResult (它呈现一个视图,并且是最常用的result类型), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult以及EmptyResult.

posted @ 2010-08-23 19:32  jasen.kin  阅读(7999)  评论(3编辑  收藏  举报