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方法,运行该ControllerExecute()方法最后会运行到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的运行生命周期的更多相关文章

  1. ASP.NET MVC 小牛之旅1:何谓MVC

    在学习ASP.NET MVC之前首先了解什么 是MVC ? MVC不是一种语言,严格来说也不算一个技术,而是开发时所使用的一种架构(框架),它就像是一种开发观念,或是一个设计样式. MVC让软件开发的 ...

  2. ASP.NET MVC 小牛之旅3:Routing——网址路由

    网址路由(Routing)在ASP.NET MVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器. 3.1匹配通过浏览器传来的HTTP请求 首先我们 ...

  3. asp.net C#母版页和内容页事件排版加载顺序生命周期

    asp.net C#母版页和内容页事件排版加载顺序生命周期 关于ASP页面Page_Load发生在事件之前而导致的问题已经喜闻乐见,对于问题的解释也很全面,但是如何解决问题则较少有人说明,我就再 简单 ...

  4. ASP.NET MVC 小牛之旅2:体验第一个MVC程序

    了解了什么是MVC之后,接下来用一个非常简单的留言板程序概要的了解MVC网站开发的过程,对MVC开发有个大致的轮廓.第一个项目将不会提到过多与数据库相关的技术,因此将以Framework Code F ...

  5. ASP.NET MVC5 的请求管道和运行生命周期

    https://www.jianshu.com/p/848fda7f79e0 请求处理管道 请求管道是一些用于处理HTTP请求的模块组合,在ASP.NET中,请求管道有两个核心组件:IHttpModu ...

  6. ASP.NET Core中的依赖注入: 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  7. [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject

    本人博客已转移至:http://www.exblr.com/liam  为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...

  8. [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)

    ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架.ASP.NET 框架会创建一个定义在 Global.asax 文件中 ...

  9. ASP.NET 页生命周期

    ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页生命周期非常重要,因为这样 ...

随机推荐

  1. C++难点的一些总结

    一. C++成员函数的重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数. (1) void func(int a); (2) virtual void fu ...

  2. 从request中读数据流

    ServletInputStream servletInputStream = reqeust.getInputStream(); int len=0; int size=reqeust.getCon ...

  3. HTML5调用百度地图API进行地理定位实例

    自从HTML5的标准确定以后,越来越多的网站使用HTML5来进行开发.虽然对HTML5支持的浏览器不是很多,但是依然抵挡不了大伙对HTML5开发的热情.今天为大家带来的是使用HTML5调用百度地图AP ...

  4. 使用myeclipes制造属于自己的jar

    选定你需要在jar中包含的package或者class 步骤1:右键export导出, 步骤2:导出类型为java --JRE  file. 步骤3:直接finish即可完成 如果希望你的jar带源码 ...

  5. uoj problem 12 猜数

    题目大意 每次询问给出g,l,有\(a*b = g*l = n\),且\(a,b\)均为\(g\)的倍数.求\(a+b\)的最小值和\(a-b\)的最大值. 题解 因为\(a,b\)均为\(g\)的倍 ...

  6. 关于VGG网络的介绍

    本博客参考作者链接:https://zhuanlan.zhihu.com/p/41423739 前言: VGG是Oxford的Visual Geometry Group的组提出的(大家应该能看出VGG ...

  7. CF1092 D & E —— 思路+单调栈,树的直径

    题目:https://codeforces.com/contest/1092/problem/D1 https://codeforces.com/contest/1092/problem/D2 htt ...

  8. 简单易懂dubbo入门实例

    一.创建Maven多模块项目 项目结构如下 模块介绍: dubbo-api            ----API接口 dubbo-consumer ----消费者 dubbo-provider     ...

  9. Python:生成器表达式

    转于:http://www.cnblogs.com/liu-shuai/p/6098218.html 博主:刘-帅 简介: 生成器表达式并不真正的创建数字列表,而是返回一个生成器对象,此对象在每次计算 ...

  10. Python:正则表达式(二)

    则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语 ...