现在我们先来看看 ASP.NET Web Form处理过程
1. ASP.NET Web Form请求处理过程
我们知道 ASP.NET Web Form编程用,IIS6请求的处理的过程如下:
IIS6 的 ASP.net 请求处理过程
ASP.NET的请求过程是基于一个管道(pipeline)模型的,ASP.NET会把所有的http请求(Requests)都发送给这个管道里的http组件(modules)。每个组件在接收到http请求后进行一些相应处理工作。当http请求通过了所有的http modules程序后,将会被交由一个http handler程序来处理,处理后的结果又将通过管道里http modules返回。
2 ASP.NET MVC 请求过程图:
ASP.NET MVC 的 Web 请求首先通过 UrlRoutingModule 对象(HTTP Module 模块)进行传递。此模块将分析请求并执行路由选择(这和ASP.NET Web Form里类似,只是路由器就是 一个Model模块,他们来分发请求 给特定的Handler处理程序)。UrlRoutingModule 对象将选择与当前请求匹配的第一个路由对象。路由对象是实现 RouteBase 的类,并且通常是 Route 类的实例。) 如果任何路由都不匹配,则 UrlRoutingModule 对象不执行任何操作,并允许请求回退到常规的 ASP.NET Web Form 或 IIS 请求处理流程。这个就和第一节相同了。
从选定的 Route 对象中,UrlRoutingModule 对象将获得一个对象,所获得的对象将实现 IRouteHandler接口并与 Route 对象关联。通常,在 MVC 应用程序中,这将是
MvcRouteHandler 类的一个实例。MvcRouteHandler
实例将创建一个实现 IHttpHandler 接口的 MvcHandler 对象。
然后,MvcHandle 对象会选择将最终处理该请求的控制器Controller。有关更多信息,请参见
ASP.NET Routing。UrlRoutingModule
和 MvcRouteHandler 类是 ASP.NET MVC 框架的入口点。它们执行下列操作:
-
选择 ASP.NET MVC 程序中合适的控制器 Controller。
-
获取特定的控制器Controller实例。
-
调用该控制器的 Execute 方法,执行Action操作方法。
3 ASP.NET MVC 项目的执行阶段
下表列出了 ASP.NET MVC Web 程序的执行阶段。
阶段
|
详细信息
|
---|---|
接收请求
|
在 Global.asax 文件中,Route 对象将添加到
RouteTable 对象中。
|
执行路由
|
UrlRoutingModule 模块使用
RouteTable 中第一个匹配的 Route 对象来创建
RouteData 对象,然后创建
RequestContext 对象。
|
创建Handler
|
MvcRouteHandler 创建
MvcHandler 类的实例,并将
RequestContext 实例传递给处理程序。
|
创建控制器
|
MvcHandler 对象使用
RequestContext 实例标识用于创建控制器实例的
IControllerFactory 对象
|
执行控制器
|
MvcHandler 实例调用控制器的
Execute 方法。
|
调用操作
|
对于从
ControllerBase 类继承的控制器,与该控制器关联的
ControllerActionInvoker 对象将决定要调用的 controller 类的操作方法
|
执行结果
|
返回结果类型来执行结果。可执行的内置结果类型包括:ViewResult(呈现视图并且是最常用的结果类型)、RedirectToRouteResult、RedirectResult、ContentResult、JsonResult、FileResult
和 EmptyResult。
|
4.总结
- ASP.NET MVC 和ASP.NET Web Form请求处理有很大的相似之处。我们可以看出来,整个MVC的架构,前期的基础架构基本都是一样的,所不同的就是在Module 模块和Handler 处理程序的变换。而这不分的变换,主要是为了实现ASP.NET MVC里 请求路由机制,把 MVC三个部分关联起来。
- UrlRoutingModule 和 MvcRouteHandler 就是之前的 Module 模块和Handler 处理程序。
- 换个新的名字,但是在整个架构中的角色没有变化,1个是截获请求,进行分析,转发,一个是进行实际的处理工作。
老徐Frank Xu Lei
修订、翻译、整理
转自:http://54peixun.com/frankxulei/POST/e3100c5816fa4c7c9534229d261c67f1