Mvc 流程调用分析
链接地址 https://www.processon.com/view/link/59e71fbbe4b09000f03ce78e

总结:
1. 在Global.ascx 中我们使用RouteCollection中使用MapRoute注册了自己的RouteData,这里面就引入了IRouteHandler,也就是MvcRouteHandler
2. 在UrlRoutingModule中获取了第一步中设置的IRouteHandler(MvcRouteHandler)并获取了IHttpHandler(MvcHandler),然后使用HttpContextBase.RemapHandler() 注入了MvcHandler,然后继续管道事件的执行
3. 在MvcHandler中激活了IController.Execute()
4. ControllerBase 中对Execute进行了封装并开放了ExecuteCore方法,Controller重写ExecuteCore方法,并激活了Action的执行
5. 插一句: 激活Controller的原理大概是,RouteData.GetRequiredString()获取controllername,然后利用反射找到具体的类实例化并调用ExecuteCore方法,
激活Action的原理是RouteData.GetRequiredString()获取actionname,之前找到的Controller利用反射找到对应方法,然后执行
6. action 执行过程中,会触发ActionResult.ExecuteResult() ,普通的返回值比如Json(),File(),Content()这些比较简单,只是使用Response.Write() 配合Content-Type完成输出而已,所以图中忽略了
真正难得ViewResult,他需要加载Razor语法和数据,这个是比较复杂的
7. ViewResultBase继承自ViewResult,封装了参数检查,和渲染页面的操作,同时开发了一个FindView() 方法
在ExecuteResult中我们可以看到他找到IView之后,调用了IView.Render()完成了对Response.OutPut的修改,最终完成渲染
8. PartialViewResult 和ViewResult 都要事先FindView,而他们又是通过调用ViewEngineCollection来完成这个操作的
ViewEngineCollection其实又是对IViewEngine的一个封装,其中的Engines属性默认只有系统默认实现的两个类 RazorViewEngine,WebFormViewEngine
这里我也无法深入解析了,还不太懂,就这样吧
9. 完成了IView.Render() 之后基本上razor页面就已经在Response中了,然后按照asp.net的管道事件一直到End_Request ,然后再到浏览器接收整个报文,game over.
Mvc 流程调用分析的更多相关文章
- 基于请求响应的MVC框架调用分析
一.使用Servlet来处理请求响应 当client提交数据之后.接着发送请求,请求被封装成对象,server接收到请求,依据请求的URL.来推断将请求对象交由哪个Servlet处理. 在servle ...
- ASP.NET MVC源码分析
MVC4 源码分析(Visual studio 2012/2013) HttpModule中重要的UrlRoutingModule 9:this.OnApplicationPostResolveReq ...
- asp.net mvc源码分析-ModelValidatorProviders 客户端的验证
几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...
- 精尽Spring MVC源码分析 - 寻找遗失的 web.xml
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - 一个请求的旅行过程
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- Spring mvc源码分析系列--Servlet的前世今生
Spring mvc源码分析系列--Servlet的前世今生 概述 上一篇文章Spring mvc源码分析系列--前言挖了坑,但是由于最近需求繁忙,一直没有时间填坑.今天暂且来填一个小坑,这篇文章我们 ...
- WebForm / MVC 源码分析
ASP.NET WebForm / MVC 源码分析 浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm ...
- ASP.NET WebForm / MVC 源码分析
浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送 ...
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
原文:asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证 在前面的文章中我们曾经涉及到ControllerActionInvoker类GetPara ...
随机推荐
- 【集美大学1411_助教博客】团队作业10——项目复审与事后分析(Beta版本)
写在前面的话 软件工程课结束了,大家开心吗?是不是再也不用熬夜写代码了?如果这门课你真的熬夜写代码了,相信你一定有收获,如果这门课结束了你觉得是自己一个全新的开始,那么这门课的意义就实现了.团队作业全 ...
- 201521123091 《Java程序设计》第3周学习总结
Java 第三周总结 第三周的作业. Java 第三周总结 1.本章学习总结 2.Java Q&A 1.代码阅读 2.构造函数有什么用?其编写格式是什么?如果一个类不写构造函数,它有构造函数吗 ...
- 团队作业——Alpha冲刺之事后诸葛亮
小组成员: 武健男:201421123091 林俊鹏:201421123076 何跃斌:201421123082 陈鑫龙:201421123078 潘益靖:201421123086 黄睿:201421 ...
- 201521123108 《Java程序设计》第6周学习总结
本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 书面作业 2.1. clone方法 1.1 Object对象中的 ...
- 201521123007《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 Object ...
- 201521123042 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 多态性的应用: instanceof运算符: 通过 instanceof判断父类引用所引用的 ...
- JAVA课程设计个人博客 学生成绩管理 201521123014 黄绍桦
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 本人主要负责DAO模式.添加和修改学生的信息功能 ...
- php中获取当前系统时间、时间戳
今天写下otime($time, $now)为将时间格式转为时间戳,$time为必填.清楚了这个,想了解更多,请继续往下看. 3. date($format)用法比如:echo date(‘Y-m-d ...
- Nim函数调用的几种形
Nim函数调用的几种形式 Nim 转载条件:如果你需要转载本文,你需要做到完整转载本文所有的内容,不得删改文内的作者名字与链接.否则拒绝转载. 关于nim的例行介绍: Nim 是一门静态编译型的系统级 ...
- sourcetree和gitlab配置图解
一.前期准备安装 1.git客户端(1.产生gitlab服务端和本地git相互传输时所需要校验的私钥和公钥 2.直接在Idea中使用git提交和push代码,当然也可以用sourcetree提交 ...