博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC从路由到Controller运行机制
阅读量:6652 次
发布时间:2019-06-25

本文共 1319 字,大约阅读时间需要 4 分钟。

下图中每个箭头的左侧对应的右侧方法为对象调用方法的过程:

 

       由于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对象来对请求作最终的响应。

 

转载于:https://www.cnblogs.com/Vam8023/p/8453088.html

你可能感兴趣的文章
grub2故障举例及修复
查看>>
第 2 章 OpenStack 架构 - 015 - OpenStack 架构
查看>>
java中的代码块理解
查看>>
MogileFS 安装及基本管理
查看>>
我的友情链接
查看>>
CentOS 7.2 mysql-5.7.17 审计插件安装、开启与设定
查看>>
binlog+审计日志 定位mariadb(mysql)数据库特定sql
查看>>
Drupal8开发教程:认识.info.yml文件
查看>>
python之文件操作、OS模块、CSV、 面向对象
查看>>
win10-1079版本无法匿名访问SMB共享文件夹
查看>>
AngularJs 基础教程 —— 与php服务器
查看>>
centos7 搭建SVN环境
查看>>
Cookie
查看>>
第一周总结
查看>>
一分钟完成MySQL5.7安装部署
查看>>
ORA-10458、ORA-01196和ORA-01110错误解决办法
查看>>
Python和Ruby哪个好学?python基础
查看>>
为什么喜欢自驾游?
查看>>
爱创课堂每日一题九十三天-html常见兼容性问题?
查看>>
2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/mor
查看>>