ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期
ASP.NET MVC的运行生命周期大致分成三大过程:(1)网址路由对比。 (2)运行Controller与Action。 (3)运行View并回传结果。
4.1网址路由对比
当iis收到http请求后,会先通过UrlRoutingModule模块处理所有与网址路由有关的运算。默认情况下,如果该网址可以对应到相对于网站根目录下的实体文档,则不会通过ASP.NET MVC进行处理,会自动略过所有的网址路由对比,而是直接交给IIS或ASP.NET运行。
如果要改变这个UrlRoutingModule的默认对比行为,让所有从客户端浏览器发送到iis的http请求全部要经过UrlRoutingModule模块进行路由规则判断的话,可以在Global.asax的Application_Start()事件最前面将 RouteTable.Routes.RouteExistingFiles = true即可。如图所示:
、
设置后这样网站的所有收到的http请求都会以在RegisterRoutes定义的网址路由规则进行一一对比,如果对比成功,就会以ASP.NET MVC的行为进行处理,默认交给MvcHandler来运行,如果失败,机会将运行的权力交给IIS负责。
4.2运行Controller与Action
当程序运行到MvcHandler之后,我们知道所有HttpHandler运行的入口点就是ProcessRequest方法,运行该Controller的Execute()方法,最后会运行到ExecuteCode()方法时,会通过路由值来决定运行Controller里的哪个Action,如果从Controller类别中找不到Action可以运行时,就会运行HandleUnknownAction
方法,有个继承自ActionResult的型别叫ViewResult,如果该Action回传的型别为ViewResult的话,就会还有下一个小节的流程要执行,并不是运行return View()的时候就结束,否则就会通过实际继承自ActionResult的对象去运行结果并响应至客户端。

4.3运行View并回传结果
如果从Action回传的ActionResult对象为ViewResult的话,ASP.NET MVC会进一步调用实作IViewEngine界面的对象实体的FindView方法,以取得一个实作IView界面的对象实体,然后调用IVew对象实体的Render()方法响应HTML到客户端。
4.4MVC执行步骤概览图示


ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期的更多相关文章
- ASP.NET MVC 小牛之旅1:何谓MVC
在学习ASP.NET MVC之前首先了解什么 是MVC ? MVC不是一种语言,严格来说也不算一个技术,而是开发时所使用的一种架构(框架),它就像是一种开发观念,或是一个设计样式. MVC让软件开发的 ...
- ASP.NET MVC 小牛之旅3:Routing——网址路由
网址路由(Routing)在ASP.NET MVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器. 3.1匹配通过浏览器传来的HTTP请求 首先我们 ...
- asp.net C#母版页和内容页事件排版加载顺序生命周期
asp.net C#母版页和内容页事件排版加载顺序生命周期 关于ASP页面Page_Load发生在事件之前而导致的问题已经喜闻乐见,对于问题的解释也很全面,但是如何解决问题则较少有人说明,我就再 简单 ...
- ASP.NET MVC 小牛之旅2:体验第一个MVC程序
了解了什么是MVC之后,接下来用一个非常简单的留言板程序概要的了解MVC网站开发的过程,对MVC开发有个大致的轮廓.第一个项目将不会提到过多与数据库相关的技术,因此将以Framework Code F ...
- ASP.NET MVC5 的请求管道和运行生命周期
https://www.jianshu.com/p/848fda7f79e0 请求处理管道 请求管道是一些用于处理HTTP请求的模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModu ...
- ASP.NET Core中的依赖注入: 构造函数的选择与服务生命周期管理
ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
本人博客已转移至:http://www.exblr.com/liam 为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)
ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架.ASP.NET 框架会创建一个定义在 Global.asax 文件中 ...
- ASP.NET 页生命周期
ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页生命周期非常重要,因为这样 ...
随机推荐
- assembly打包插件引发的自定义spring标签找不到声明的错误
异常信息:通配符的匹配很全面, 但无法找到元素 的声明. 报的异常信息是关于我们使用的一个自定义的spring标签,这个异常通常的原因可能是读取不到自定义标签的映射. 到META-INF目录下找一下是 ...
- 关于C++类的成员函数是否要加关键字“const”
原则:类的成员函数在小括号后大括号前加上 const ,代表不准备改变对象的数据.不加的话代表有可能会改变对象的数据. 1.当常量对象,就是加上const修饰的类的成员去调用常量成员函数时,这表示:对 ...
- spring学习(4)
在spring容器内拼凑bean叫做装配.装配bean的时候,需要告诉容器哪些bean以及容器如何使用依赖注入将它们配合在一起. 上下文定义文件的根元素是<beans>,<beans ...
- php-fpm进程内存泄漏
线上服务器内存报警 线上web8G内存的服务器,内存几乎吃光,top查看,发现php-fpm进程每个都是几十M,php-fpm配置static, 一共150个 解决 排除过程中,其他机器相同配置都没有 ...
- bzoj-2458 2458: [BeiJing2011]最小三角形(计算几何+分治)
题目链接: 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1101 Solved: 380 Des ...
- 51nod 1450 闯关游戏——期望dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 想了半天,不知道不能走的状态(即最后不足m个的状态)怎么办. ...
- 通用RowMapper封装查询结果到自定义类中
package object; import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.SQLExceptio ...
- spring下,druid,c3p0,proxool,dbcp四个数据连接池的使用和配置
由于那天Oracle的数据连接是只能使用dbcp的数据库连接池才连接上了,所以决定试一下当下所有得数据库连接池连接orcale和mysql,先上代码 配置文件的代码 #================ ...
- Java父类构造器的讲解
众所周知,对于Java中的所有类而言,它们有一个根父类,即java.lang.Object类. 对于Java中构造器执行的顺序而言,程序执行的顺序为,先执行父类的非静态代码块,然后执行父类的相应的构造 ...
- java基础知识(3)----面向对象
三:面向对象:特点: 1:将复杂的事情简单化.2:面向对象将以前的过程中的执行者,变成了指挥者.3:面向对象这种思想是符合现在人们思考习惯的一种思想. 过程和对象在我们的程序中是如何体现的呢?过程其实 ...