先上个图
步骤一
IIS
 
当请求到达我们的服务器时,在asp.net取得控制之前,windows操作系统的核心组件 HTTP.SYS一直在监听请求端口, 
接下来asp.net会通知所有注册的httpModule。 有一个httpModule是默认注册了的。那就是UrlRoutingModule,也就进入了路由模块.核心路由接管控制
IIS上有两种管道模式
ISAPI模式(就是常说的经典模式)
ISAPI模式通常和webform联系的比较多,因为他更多的是处理带 后缀扩展名 如  .aspx  .ashx等 的请求(当然也有其他方法来处理不带扩展名的请求 wildmap)
 
集成模式
集成模式只在iis7支持。主要处理不带扩展名的请求
 
步骤二
 
CoreRouting 
 
当核心路由系统接管控制之后,会把请求封装成 RequestContext这样一个数据结构。这个数据结构中包含了几乎所有的请求信息,以便后面的组件可以任意的去使用它。mvc框架就是使用requestContext中的信息,将控制权转移给对应的controller对象,并提出其中的action参数。
 
比如说我们的请求为 //Home/SayHi 那么封装成RequestContext对象传递给MVC之后 就提取出 控制器名称 HomeController 以及要调用这个控制器中的SayHi()方法 。(接下来的步骤就是要能创建这个我们自定义的控制器对象了)
 
步骤三 
 
controllers 和actions
 
从上面的流程图可以知道, mvcRouteHandler从核心路由模块过渡到mvc框架之后,就要生产对应的controller对象类处理了。
这些对象 你可以采用 不标准的方法通过直接实现Icontroller接口来创建 ,也可以通过controllerFactory来实现。当然这个控制器工厂可以是你自定义的实现了IcontrollerFactory接口的自定义工厂(或者是默认工厂的子类),也可以是mvc框架自带的DefaultControllerFactory来创建。
很显然默认会采用后者。(前者创建自定义工厂肯定也会有用处,因为它可以直接改变控制器的模子,如果你想造出一批特殊功能的控制器,就会相当有用了)
 
步骤四
 
controllers内部的这些action并不是直接自己invoke的 而是通过一个IActionInvoker来触发执行,然后返回actionResult给ViewEngine去解析。同理,这个IActionInvoker我们也可以自行实现。

Asp.net MVC流程简述的更多相关文章

  1. ASP.NET MVC流程解说

    开始想这个标题时,,很忧郁什么标题将得到更好的叫什么,最后确定的解释,虽然稍0基金会,但是,这个概念是非常.我想出了一个相当的价格值的. ,開始. 1.MVC的基本开发流程   2.webform和M ...

  2. 【源码】进入ASP.NET MVC流程的大门 - UrlRoutingModule

    UrlRoutingModule的功能 在ASP.NET MVC的请求过程中,UrlRoutingModule的作用是拦截当前的请求URL,通过URL来解析出RouteData,为后续的一系列流程提供 ...

  3. Visual Studio 2015创建ASP.NET MVC流程

    本文链接:https://blog.csdn.net/begindong/article/details/68059437本人这两天第一次对c#进行系统学习,写出来做个学习记录和大家分享,以下有什么错 ...

  4. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程

    简述C#中IO的应用   在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...

  5. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

    好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: --> 开篇:上一篇 ...

  6. ASP.NET MVC学前篇之请求流程

    ASP.NET MVC学前篇之请求流程 请求流程描述 对于请求的流程,文章的重点是讲HttpApplication和HttpModule之间的关系,以及一个简单的示例实现.(HttpModule又是M ...

  7. Asp.net MVC的Model Binder工作流程以及扩展方法(2) - Binder Attribute

    上篇文章中分析了Custom Binder的弊端: 由于Custom Binder是和具体的类型相关,比如指定类型A由我们的Custom Binder解析,那么导致系统运行中的所有Action的访问参 ...

  8. Asp.net MVC的Model Binder工作流程以及扩展方法(1) - Custom Model Binder

    在Asp.net MVC中, Model Binder是生命周期中的一个非常重要的部分.搞清楚Model Binder的流程,能够帮助理解Model Binder的背后发生了什么.同时该系列文章会列举 ...

  9. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

随机推荐

  1. MySQL(视图、触发器、函数)

    day61 参考:http://www.cnblogs.com/wupeiqi/articles/5713323.html 视图 视图:给某个查询语句设置别名,日后方便使用               ...

  2. Retrofit源码解析(上)

    简介Retrofit是Square公司开发的一款针对Android网络请求的框架,官网地址http://square.github.io/retrofit/ ,在官网上有这样的一句话介绍retrofi ...

  3. (5)Oracle基础--约束

    · 约束的作用 <1> 定义规则 <2> 确保数据的完整性 · 约束 <1> 非空约束 ① 创建表时为字段添加非空约束 CREATE TABLE table_nam ...

  4. Python封装

    什么是封装 在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其 含义是其他程序无法调用. 要了解封装,离不开“私有化”,就是将类或者是函 ...

  5. C#数据库连接方法

    一:C# 连接SQL数据库 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myP ...

  6. notepad++中设置python运行

    1. Notepad++ ->"运行"菜单->"运行"按钮 2. 在弹出的窗口内输入以下命令: cmd /k python "$(FULL ...

  7. C/C++ -- Gui编程 -- Qt库的使用 -- Qt5试用

    1.头文件<QtGui>变成了<QtWidgets> 相应<QtGui/***>变成了<QtWidgets/***> 2.QTextCodec::set ...

  8. python:rs, ws, es = select.select(inputs, [], []) --报错error 10022

    昨晚折腾的1个多钟,直到3点多才睡,感觉自己也是热爱代码了,敲3个多钟一点也不累(其实是为了凌晨6点起来抢票回家了^_^) 练习python中select进行异步通信-防止socket.recv方法阻 ...

  9. onclick时间加return和不加return的区别

    JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...

  10. 文件触发式实时同步 Rsync+Sersync Rsync+Inotify-tools

    一.概述 1.Rsync+Sersync 是什么? 1)Sersync使用c++编写基于inotify开发的触发机制: 2)Sersync可以监控所监听的目录发生的变化(包括新建.修改.删除),具体到 ...