个人网站:
英语好的朋友直接看官方教程:
理解ASP.NET MVC的执行过程
本篇文章将帮助理解ASP.NET MVC的执行过程,学习怎么ASP.NET MVC 框架怎么一步步处理浏览器响应的。
当您请求一个ASP.NET MVC 的Web应用程序时,首先传递一个UrlRoutingModule对象,它是一个Http模块,由它解析请求并根据路由选择执行。UrlRoutingModule对象选择第一个匹配当前请求的route对象(route对象是继承并实现RouteBase的类,是一个Route类的实例。)如果没有和它匹配成功,UrlRoutingModule一般什么都不做,让请求继续回到ASP.NET或IIS中去。 从Route选择对象后,获得与UrlRoutingModule相关的IRoteHandler对象,在一个MVC应用程序中常用来当做是MvcRouteHandler的一个实例,IRouteHandler创建一个IHttpHandler对象并将其传递到一个IHttpContext对象中去,在默认的情况下,这个Mvc的IHttpHandler实例就是MvcHandler对象,MvcHandler对象决定由哪个最终的Controller(控制器)来处理。注意: 在IIS7.0下运行ASP.NET MVC Web应用程序时,MVC不要求修改文件扩展名,而在IIS6.0下需要为处理程序映射扩展名为.mvc的ASP.NET ISAPI DLL ASP.NET MVC 框架的切入点是模块和处理程序,他们执行下面的操作:- 在MVC Web应用程序中选择控制器
- 获取控制器的实例
- 调用控制器的Execute方法
阶段 | 详细 |
---|---|
接收的第一个请求 | 在Global.asax文件中,在RouteTable中添加Route对象。 |
执行路由 | UrlRoutingModule模块先从RouteTable集合中依次匹配Route,创建RouteData对象,然后创建RequestContext(IHttpContext)对象。 |
创建mvc请求处理程序 | MvcRouteHandler对象创建一个MvcHandler类的实例然后传递RequestContext对象实例。 |
创建控制器 | MvcHandler实例调用了Execute方法 |
调用action | 一般的Controller(控制器)都继承自Controller基类,所以,ContrllerActionInvoker对象决定调用哪个控制器的action方法并调用。 |
执行结果 | 一般的,action方法可以接收用户输入并获取结果,然后返回一个结果类型来返回结果: ViewResult(呈现一个视图) RedirectToRouteResult、RedirectResult、ContentResult、JsonResult |