[翻译:ASP.NET MVC 教程]理解MVC应用程序的执行过程
(发送)请求至基于ASP.NET MVC架构的Web应用程序首先要经过UrlRoutingModule(是一个HTTP模块)对象。该模块解析请求并且执行路由选择。UrlRoutingModule对象选择第一个与当前请求相匹配的路由对象。(路由对象是一个实现RouteBase的类,同时也是典型Route类的一个实例。)如果没有与之匹配的路由,UrlRoutingModule对象将不做任何事,并且将该请求倒回至常规的ASP.NET或IIS请求的过程中。
从被选择的Route对象的角度上来看,UrlRoutingModule对象获得了与Route对象相联系的IRouteHandler对象。典型的讲,在一个MVC应用程序中,这将是MvcRouteHandler的一个实例。IRouteHandler实例创建了一个IHttpHandler对象,然后将其传送至IHttpContext对象。默认情况下,针对MVC的IHttpHandler实例就是MvcHandler对象。MvcHandler对象之后将选择最终处理该请求的控制器。
上述模块及处理句柄是ASP.NET MVC framework的进入点。它们完成下列的动作:
l 在MVC Web应用程序中,选择适合的控制器。
l 获取一个具体的控制器实例。
l 调用控制器的执行方法。
下列表格列出了一个MVC Web项目执行的阶段情况:
阶段 |
详情 |
应用程序收到首次请求 |
在Global.asax文件中,Route对象被添加至RouteTable对象中。 |
执行路由 |
UrlRoutingModule模块使用位于RouteTable集合中第一个匹配的Route对象来创建RouteData对象,该对象之后被用来创建RequestContext(IHttpContext)对象。 |
创建MVC请求处理句柄 |
MvcRouteHandler对象创建了MvcHandler类的实例,然后将其传递给RequestContext实例。 |
创建控制器 |
MvcHandler对象使用RequestContext实例来识别用来创建控制器实例的IControllerFactory对象(典型情况为DefaultControllerFactory类的一个实例)。 |
执行控制器 |
MvcHandler实例调用控制器的执行方法。 |
实行动作 |
大多数控制器继承自Controller基类。因为控制器是这样做的,于是与控制器相关联的ControllerActionInvoker对象就决定了哪些控制器类的动作方法是应当调用的,然后再调用这些方法。 |
执行结果 |
一个典型的动作方法可能会收到用户输入、准备合适的回应数据以及之后通过返回结果类型来执行结果。嵌入的结果类型能够被执行,这些类型包括:ViewResult(呈现视图并且是最为常用的结构类型),RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, 和 EmptyResult。 |
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。