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 ...
随机推荐
- 201521123082 《Java程序设计》第14周学习总结
201521123082 <Java程序设计>第14周学习总结 标签(空格分隔):java 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. Answ ...
- 团队作业4——第一次项目冲刺(Alpha版本)3rd day
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 界面已初步完成并能够进行简单的界面关联 界面内的功能正在完善 2.登陆方面 QQ授权已申请,等待通过 申请通过后在登 ...
- 201521123103 《Java学习笔记》 第六周学习总结
一.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 二.书面作业 1.clone方法 1.1 Object对象中 ...
- 201521123071 《JAVA程序设计》第四周学习总结
1. 本周学习总结 1.1 1.2 在本周的学习中,主要学习了以下几点: 注释的应用,并能在Eclipse中查看 继承的基本定义,关键字super的用法,覆盖与重载 多态与is-a,instanceo ...
- 201521123016 《Java程序设计》第3周学习总结
1. 本周学习总结 2. 书面作业 2.1代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- Hibernate中的主键生成器generator
本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...
- 框架应用:Mybatis (一) - 入门案例
ORM框架 在实际开发中,工程中本质的任务是从数据库中获取数据,然后对数据进行操作,又或者写入数据.开发时语言是大多是面向对象的工程语言,这个时候就必须进行工程语言和数据库连接语言的转换,也就是所谓的 ...
- 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法
之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...
- Spring在JSP页面使用ServletContext
在 JSP 页面使用Application 可以 看到使用的是WebApplicationContextUtils 而不是WebApplicationContext.ROOT_WEB_APPLICAT ...
- JQuery中关于浏览器兼容性的问题
前 言 LIUWE JQuery是一个特别强大的javascript代码库,,它的操作DOM的能力是相当强大的,JQuery可以说是支持各大主流浏览器,但是随着时代的不断发展,浏览器是在不断的更 ...