MVC从路由到Controller运行机制
下图中每个箭头的左侧对应的右侧方法为对象调用方法的过程:

由于UrlRoutingModule这个HttpModule被注册到Web应用中,所有对每个抵达的请求来说,当代表当前应用的HttpApplication对象的PostResolveRequestCache事件被触发的时候,UrlRoutingModule会利用RouteTable表示的路由表(实际上RouteTable的静态属性Routes返回的RouteCollection对象代表这个路由表)针对当前请求实施路由解析。
具体来说,UrlRoutingModule会调用路由表的RouteCollection对象的GetRouteData方法,如果定义在某个Route对象上的路由规则与当前请求相匹配,那么该方法执行结束自后会返回一个包含目标Controller和Action名称的路由变量的RouteData对象。
接下来UrlRoutingModule通过RouteData对象那个的RouteHandler属性得到匹配Route对象采用的RouteHandler对象,默认情况下这是一个MvcRouteHandler对象。UrlRoutingModule就调用这个MvcRouteHandler对象的GetHttpHandler方法得到一个MvcHandler对象。UrlRoutingModule随之调用当前HttpContext的RemapHandler方法对得到的HttpHandler(MvcHandler)对象实施映射,那么此HttpHandler将最终接管当前请求的处理。
对于MvcHandler来说,当它被用来处理当前请求的时候,它会利用RouteData对象得到目标Controller的名称,并借助于主场的ControllerFactory来激活对应的Controller对象。目标Controller被激活之后,它的Execute方法被MvcHandler调用。
如果被激活的Controller对象的类型是ControllerBase的子类,当它的Execute方法被执行的时候,它会调用ActionInvoker对象的InvokeAction方法来执行目标Action方法并对当前请求予以响应。默认采用的ActionInvoker是一个ControllerActionInvoker对象,当它的InvokeAction方法被执行的时候,它会利用注册的ModelBinder采用Model绑定的方式生成目标Action方法的参数列表,并利用ActionExecutor对象以“表达式树”的方式执行目标Action方法。
目标Action方法执行之后总是会返回一个ActionResult(对于返回类型不是ActionResult的Action方法来说,ASP.NET MVC总是会将执行的结果转换成一个ActionResult对象),ControllerActionInvoker会通过执行此ActionResult对象来对请求作最终的响应。
MVC从路由到Controller运行机制的更多相关文章
- 如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题
1.问题描述 假如有一个文章的业务(Article),我们在 Controllers文件夹中创建MVC Controller和Api Controller,各个Controller中都有相同的获取文章 ...
- ASP.NET MVC 学习1、新增Controller,了解MVC运行机制
1,turorial ,根据链接教程新建一个MVC项目 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/ ...
- ASP.NET MVC的运行机制--url的全局分析
全局 首先我们来看一副图片 首先,用户通过Web浏览器向服务器发送一条url请求,这里请求的url不再是xxx.aspx格式,而是http://HostName/ControllerNam ...
- <转>ASP.NET学习笔记之理解MVC底层运行机制
ASP.NET MVC架构与实战系列之一:理解MVC底层运行机制 今天,我将开启一个崭新的话题:ASP.NET MVC框架的探讨.首先,我们回顾一下ASP.NET Web Form技术与ASP.NET ...
- MVC运行机制[转]
原:http://www.cnblogs.com/jyan/archive/2012/06/29/2569566.html#3122335 ASP.NET是一种建立动态Web应用程序的技术.它是.NE ...
- 【图解ASP.NET MVC运行机制理解-简易版】
很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然,这个只是处理请求的一部分环节.百度的面试题“客户端从浏览 ...
- NET MVC运行机制
[图解ASP.NET MVC运行机制理解-简易版] 很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然, ...
- HttpModule的认识与深入理解及MVC运行机制
转自:http://kb.cnblogs.com/page/50130/ ASP.NET MVC架构与实战系列之二:理解MVC路由配置 http://www.cnblogs.com/jyan/arch ...
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action
目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...
随机推荐
- tarjin求割点
题目: hdu3671 http://acm.hdu.edu.cn/showproblem.php?pid=3671 题意:给一个无向图,要求毁掉两个点,使图变得不连通,图一开始是连通的 因为要毁掉两 ...
- Linux-day2-pdf课件
1.Linux文件属性和权限 2.Linux重定向 3.Linux文件查找 4.Linux压缩打包 5.课堂作业 权限相关作业: 题目创建用户carol,ivy,jenny,kevin,alice创建 ...
- Alpha冲刺(2/10)——2019.4.24
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...
- NOIP2013提高组 T2 火柴排队
一开始看也想不到这居然要用到逆序对,归并排序. 先来看看题目: 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间 ...
- esb和eai的区别
话说SOA也推了很多年了,出现了比如ESB.SCA.jbi等各类技术和标准,乱的很.各类比较也说的云里雾里,在下理一理,按自己的观点说说. 先说说esb和eai的区别. 个人观点:esb就是eai+设 ...
- CP343-1 扩展ProfibusCPU 314C-2DP
1. MPI编程电缆连接PLC ,设置接口为PC Adapter MPI.1,如下图所示 2. 硬件组态插入组态,建立ethernet 网络,编译后下载 3.CP343-1安装上后,CPU run不起 ...
- angular.uppercase()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- lodash 实现一些常见的功能
排序 const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]); 数组切片 普通的 slice 可传递两个参数 ...
- postgrel执行VACUUM报VACUUM cannot run inside a transaction block
在python脚本里执行: sql_gp1 = "VACUUM dwd_access_record_inout_temp" sql_gp2 = "delete from ...
- CSS背景图片
1.背景图片插入 代码格式:background-image:url(): 括号内填写图片路径 2.背景图片设置大小 代码格式:background-size:宽.高 3.背景图片设置不平铺 代码格式 ...