您的位置:首页 > 编程语言 > ASP

[翻译:ASP.NET MVC 教程]理解MVC应用程序的执行过程

2009-07-29 13:23 351 查看
(发送)请求至基于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
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: