MVC4 源码分析(Visual studio 2012/2013)

HttpModule中重要的UrlRoutingModule

9:this.OnApplicationPostResolveRequestCache);

10:this.PostResolveRequestCache(context);

IRouteHandler routeHandler = routeData.RouteHandler; //根据路由数据创建出了MvcRouteHandler

IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);

根据MvcRouteHandler创建出了MvcHandler:IHttpHandler(MvcHandler实现了IHttpHandler接口,接下来就要进入MVC源代码分析)

在MVC4源代码src文件夹System.Web.Mvc类库下

MVC4百度云源代码:链接:http://pan.baidu.com/s/1pLDvXB9  密码:4tiv

Reflector7百度云盘:链接:http://pan.baidu.com/s/1eSm9Y06  密码:gyx0

1:routeHandler.GetHttpHandler(requestContext);

2:MvcHandler.cs  ProcessRequest方法

通过工厂模式创建MVC中的Controller控制器,然后执行Execute方法

3:controller.Execute(RequestContext);

IController是接口,需要找具体实现类(之前通过工厂模式创建Controller控制器,优先去找Controller类)

Controller : ControllerBase  //Controller并没有实现IController接口,找其父类

ControllerBase : IController  //ControllerBase实现了IController接口

4:ExecuteCore()  //Controller类中

5:ActionInvoker.InvokeAction(ControllerContext, actionName)方法

ControllerActionInvoker : IActionInvoker  //ControllerActionInvoker 实现了IActionInvoker  接口

6:InvokeActioin

1:InvokeActionMethodWithFilters

1.1:InvokeActionMethod

2:InvokeActionResultWithFilters

2.1:InvokeActionResultFilterRecursive

2.2:InvokeActionResult

7:actionResult.ExecuteResult(controllerContext);

ViewResult : ViewResultBase   //ViewResult 并没有实现ActionResult接口,找其父类

ViewResultBase : ActionResult  //ViewResultBase实现了ActionResult接口

8:View.Render(viewContext, writer); 渲染View视图【WebForm.aspx视图引擎】

WebFormView : BuildManagerCompiledView  //WebFormView 并没有实现IView接口,找其父类

BuildManagerCompiledView : IView  //BuildManagerCompiledView实现了IView接口

8.1:BuildManagerCompiledView (WebForm.aspx视图引擎模式)

RenderView为抽象类,由其子类实现具体方法内容

执行ASP.NET 页面生命周期ProcessRequest方法,把后续第13/第14等事件执行完毕,然后把Render渲染好的所有html代码返回给浏览器

Application  19事件

ASP.NET MVC源码分析

1:获取ControllerFacotry,根据上下文反射Controller对象

  在Mvchandler的PR方法中

2:调用controller.Execute方法

  在MvcHandler的PR方法中

3:调用ActionInvoker.InvokeAction方法

  当前Controller类 -->ControllerBase类的Execute方法-->Controller类的ExecuteCore方法

4:调用InvokeActionResultWithFilter

  ActionInvoker对象为ControllerActionInvoker类的实例

5:调用actionResult.ExecuteResult

6:调用View.Render方法,将页面渲染到输出流中

  ViewResult类-->ViewResultBase类

当一个asp.net mvc应用程序提出请求,为了响应请求,包含一些请求执行流程步骤!在asp.net mvc应用程序Http request和Http Response过程中,

主要包含8个步骤:

1>RouteTable(路由表)的创建

2>UrlRoutingModule 请求拦截

3>Routing engine 确定route

4>route handler 创建相关的IHttpHandler实例

5>IHttpHandler实例确定Controller(控制器)

6>Controller执行

7>一个视图引擎创建

8>视图呈现

最新文章

  1. AJAX实现简单的注册页面异步请求
  2. sum data
  3. R画图中英文字体完美解决方案
  4. Linux跨服务器拷贝文件详解
  5. 在为知笔记中使用JQuery
  6. Asp.net Core WebApi 返回JSON自动驼峰格式化问题
  7. java集合学习一
  8. eclipse 安装插件不生效
  9. ossec 常用命令及目录说明
  10. iOS 面试题集合
  11. 第七届河南省赛F.Turing equation(模拟)
  12. 神经网络BP算法C和python代码
  13. [文学阅读] METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments
  14. SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
  15. Python 项目实践三(Web应用程序)第一篇
  16. H5 音频标签自定义样式修改以及添加播放控制事件
  17. Android简易实战教程--第四十五话《几种对话框》
  18. Zookeeper + Dubbo + SpringMVC + dubbo-admin
  19. const 和 const_cast
  20. 基于jquery地图特效全国网点查看代码

热门文章

  1. JOHN W. TUKEY: HIS LIFE AND PROFESSIONAL CONTRIBUTIONS
  2. Delphi XE中类成员的访问权限(新增了strict private和strict protected,还有automated)
  3. Win8下在Vmware11中安装使用苹果系统OS X 10.10
  4. [Android学习笔记]startActivityForResult和onActivityResult的使用
  5. oracle 密码文件文件
  6. ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码
  7. Android----------WindowManager
  8. Hadoop Hive与Hbase关系 整合
  9. Servlet(七)生成验证码
  10. Struts2第一个工程helloStruts极其基本配置