理解MVC应用程序的执行过程

来源:互联网 发布:linux开放tcp端口 编辑:程序博客网 时间:2024/05/16 12:38

对基于ASP.NET MVC应用程序的请求首先被传递给UrlRoutingModule处理,UrlRoutingModule实现了IHttpModule接口。该模块对请求进行解析然后进行路由选择。UrlRoutingModule对象从路由表中选择第一个匹配该请求的路由供后继处理使用。如果没有跟请求匹配的路由那么UrlRoutingModule将把请求返回给常规的ASP.NET或者IIS请求处理。从选中的Route对象那里UrlRoutingModule获得跟Route对象相关联的实现了IRouteHandler接口的对象。在MVC应用程序当中,典型的这应该是一个MvcRouteHandler类的实例。MvcRouteHandler类的实例创建一个实现了IHttpHandler接口的MvcHandler对象。然后MvcHandler对象选择最终处理请求的控制器。UrlRouteModule和UrlRouteHandler这两个类是ASP.NET MVC框架的入口点。他们扮演了以下几个功能:

1.选择恰当的控制器

2.获得具体控制器实例

3.调用控制器的Execute方法

下表列出了MVC网站项目的执行阶段

阶段                                        详细说明
接收到应用程序的第一个特请求    在Global.asax文件中,一系列Route对象被添加到RouteTable中
执行路由                                  UrlRouteModule模块对象选择第一个匹配的路由创建一个RouteData对象,他将被用来创建RequestContext对象
创建MVC请求的处理程序            MvcRouteHandler创建一个MvcHandler实例并把RequestContext实例传递给他
创建控制器                               MvcHandler实例通过RequestContext实例找到创建控制器实例的IControllerFactory对象
执行控制器                              MvcHandler实例调用控制器的Execute方法
触发功能                                 对与继承与ControllerBase的那些控制器,跟控制器相关联的ControllerActionInvoker决定了应该调用控制器的哪个功能方法,然后调用那个方法
执行结果                                 功能方法收到来自用户的输入,准备好恰当的相应数据,然后执行结果返回结果类型。内建                                          的执行结果类型包括以下几种:ViewResult,RedirectToRouteResult,RedirecteResult,ContentResult,JsonResult,FileResult,EmptyResult