到基于MVC的ASP.NET Web应用的请求首先会被传递到UrlRoutingModule对象。这个对象是一个HTTP模块。这个模块将请求处理并且执行路由选择。UrlRoutingModule对象会选择符合当前请求的第一个路由对象(路由对象是一个实现了RouteBase的类,并且通常是Route类的实例)。如果没有找到匹配的路由对象,则UrlRoutingModule对象不做什么事情并且让请求退回到正常的ASP.NET或IIS请求处理过程。
从被选中的Route对象中,UrlRoutingModule对象获得与该Route对象相关的IRouteHandler对象。一般来说,在一个MVC应用中,这会是MvcRouteHandler的实例。该IRouteHandler实例创建一个IHttpHandler对象然后将它传递到IHttpContext对象。默认情况下,MVC的IHttpHanlder实例是MvcHandler对象。接着,MvcHandler对象选择将最终处理这些请求的控制器。
当ASP.NET MVC Web应用运行在IIS 7.0的时候,MVC项目并不需要文件名后缀。但是,当运行在IIS 6.0的时候,处理程序需要你将.mvc文件名扩展映射到ASP.NET ISAPI DLL文件。
模块和处理程序是ASP.NET MVC框架的入口。他们执行了以下的行为:
- 在一个MVC Web 应用中选择恰当的控制器
- 获得特定的控制器实例
- 调用控制器的Execute方法
下面的表列出了一个MVC Web项目的执行阶段
内容
获得首个应用程序的请求
在Global.asax文件里,Route对象被添加到RouteTable对象。
执行路由
UrlRoutingModule模块使用第一个匹配的在RouteTable集合里的Route对象来创建RouteDatea对象。接着UrlRoutingModule模块使用它来创建一个RequestContext(IHttpContext)对象。
建立MVC请求处理程序
MvcRouteHandler对象创建一个MvcHandlder类的实例,然后将它传送到RequestContext实例
建立控制器
MvcHandler对象使用RequestContext实例通过标识IControllerFactory对象(通常是DefautlControllerFactory类的实例)来创建控制器的实例。
执行控制器
MvcHandler实例调用控制器的Execute方法。
调用行为
大部分的控制器继承自Controller基类。对于继承自Controller基类的控制器,和该控制器相关的ControllerActionInvoker对象会决定该调用该控制器类的哪一个行为函数,并接着调用该函数。
执行结果
一个通常的行为函数可能接受用户输入,准备恰当的响应数据,然后通过返回一个结果类型来执行结果。可以被执行内置的结果类型包括:ViewResult(渲染一个视图,同时也是最常使用的结果类型),), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, and EmptyResult.