ASP.NET MVC从请求到响应发生了什么
*过程描述
当浏览器发出一个http请求后,该请求被UrlRoutingModule截获,UrlRoutingModule根据请求上下文去系统路由表(RouteTable)中匹配,从中获取一个RouteData,包含了请求的路由信息,特别是包含一个RouteHandler属性,因为在global的Application_Start方法中我们注册了mvc的路由规则,所以该RouteHandler属性的类型是MvcRouteHandler(实现了IRouteHandler)。UrlRoutingModule根据RouteData的RouteHandler属性又可以得到一个HttpHandler,该HttpHandler的类型是MvcHttpHandler(因为RouteHandler的类型是MvcRouteHandler),并由MvcHttpHandler来具体处理请求的一些逻辑。

MvcHttpHandler类实现了IHttpHandler,其核心方法是ProcessRequest,它也是IHttpHandler接口中唯一要实现的方法,该方法被用来处理请求。

在处理请求时,MvcHttpHandler会根据请求信息生成相应Controller的实例(所有Controller类最终会继承一个IController接口,该接口中包含一个Execute方法,用来执行指定的请求上下文),该Controller的实例会根据请求信息调用指定的acton。在执行action的过程中又经历了请求参数的模型绑定,操作过滤器的请求拦截处理和操作逻辑的执行。

Controller中Action返回给客户端的都是ActionResult类型,ActionResult是一个抽象类,其实现主要包含两类:ViewResult类和非ViewResult类(如JsonResult、ContentResult、FileResult等)。如果Action返回的是非ViewResult,则内容将直接被输送到Response响应流中,显示给客户端,而如果返回的是ViewResult,则视图引擎会找到需要被渲染的视图,视图被加载成WebViewPage<TModel>类型,并渲染生成Html,最终返回Html。
*细节补充
1.UrlRoutingModule中的方法为什么会在请求中被调用
一个请求进入ASP.NET请求处理管道时,会经历19个阶段,即19个事件,其中的PostResolveRequestCache事件被UrlRoutingModule中的方法注册,这样自然在经历PostResolveRequestCache事件时,会去调用UrlRoutingModule中的方法。其中UrlRoutingModule对象是ASP.NET根据在全局webconfig(C\Windows\Microsoft.NET\Framework\版本号\Config\Web.config)中的配置预先加载的。
UrlRoutingModule继承了IHttpModule接口,该接口中的init方法被用来向上述19个事件中注册事件处理程序。ASP.NET也是因为IHttpModule,可以实现拓展。

2.路由表中的路由规则是何时被注册的,RouteData中RouteHandler属性的类型为什么是MvcRouteHandler?
路由表中的路由规则是在global中的Application_Start方法中被注册的,此处注册的方法是RouteConfig.RegisterRoutes(RouteTable.Routes),该方法内部调用了RouteCollection对象的MapRoute方法,而该方法内部其实已经定义了当前路由的RouteHandler为MvcRouteHandler。


*完整的请求处理图

*参考文章
1.http://www.cnblogs.com/canfengfeixue/p/8035311.html
2.https://www.cnblogs.com/ensleep/p/5458270.html
ASP.NET MVC从请求到响应发生了什么的更多相关文章
- 详解ASP.NET MVC的请求生命周期
本文的目的旨在详细描述asp.net mvc请求从开始到结束的每一个过程. 我希望能理解在浏览器输入url并敲击回车来请求一个asp.net mvc网站的页面之后发生的任何事情. 为什么需要关心这些? ...
- ASP.NET MVC的请求生命周期
我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为ASP.NET MVC是一个扩展性非常强的框架.例如, ...
- ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍
一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...
- Asp.net MVC进入请求管道的过程
Asp.net MVC进入请求管道的过程 Asp.Net MVC 跟AspNet 入口解释 Asp.Net MVC请求处理过程 mvc 请求模型 mvc的原理 mvc模型 NewMVCPipleLin ...
- Asp.net MVC 之请求生命周期
今天主要试着描述一下ASP.NET MVC 请求从开始到结束的整个生命周期,了解这些后,对MVC会有一个整体的认识. 这里主要研究了MVC请求的五个过程. 1.创建RouteTable 当ASP.NE ...
- Asp.Net MVC如何返回401响应码
需求: 在默认创建的Asp.Net MVC项目中(这里使用VS2013),需要手动返回一个401响应码给浏览器.我们的代码可能是下面这样子的. public ActionResult Un ...
- asp.net MVC通用权限管理系统-响应式布局-源码
一.Angel工作室简单通用权限系统简介 AngelRM(Asp.net MVC Web api)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术 ...
- 基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)
1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个 ...
- ASP.NET MVC AJAX 请求中加入 antiforgerytoken 解决“所需的防伪表单字段“__RequestVerificationToken”不存在”问题
在ASP.NET mvc中如果在表中使用了@Html.AntiForgeryToken(),ajax post不会请求成功 解决方法是在ajax中加入__RequestVerificationToke ...
随机推荐
- hashcode和equals方法的区别和联系
说到 hashcode就要和Java中的集合,HashSet,HashMap 关系最为密切. 首先附录两张Java的集合结构图: 图二:(上图的简化版) 从Set集合的特点说起 & Set是如 ...
- 微服务架构集大成者—Spring Cloud (转载)
软件是有生命的,你做出来的架构决定了这个软件它这一生是坎坷还是幸福. 本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义. 1 背景 2 ...
- 为springboot项目添加springboot-admin监控
我们知道spring-boot-actuator暴露了大量统计和监控信息的端点,spring-boot-admin 就是为此提供的监控项目. 先来看看大概会提供什么样的功能 从图中可以看出,主要内容都 ...
- Xdebug调试环境配置
首先我们需要下载Xdebug 务必根据安装的PHP版本,选择合适的Xdebug版本,由于我是在Windows环境下安装PHP的,选择下载Windows版本的PHP 5.3 VC9 TS (32 bit ...
- 我对alias的重新认识:通过alias让rm更安全
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rm的悲剧总是发生在不经意之间,所以无论是在shell脚本中还 ...
- RIP笔记
RIP(工作中没见人用过这种古老的协议,了解一下距离矢量的思想即可) RIPv2支持VLSM但不支持CIDR RIP工作在应用层,用UDP封装,端口是520 无论是RIPv1还是RIPv2都既支持周期 ...
- WebFrom 小程序【条件查询】
实现按照各种条件对数据库进行综合查询 基本功能:可以根据用户需要灵活查询 重难点:各种条件的可能.限制. public List<users> selectA( string str,Ha ...
- 【Ueditor】富文本编辑使用
前提准备: 在http://ueditor.baidu.com/website/官网下载需要使用的版本.(我选用的1.4.3.1最新版本)因为这是以前做过的一个记录,现在移动到博客园保存记录.所有现在 ...
- API网关【gateway 】- 3
最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析. 由于采用了大量的nginx相关的东西,所以在此记录一下: 在ng ...
- node 链接mysql(自动链接)
Node.js与MySQL交互操作有很多库 felixge/node-mysql 常用 cnpm i mysql --save dev 1.打开mysql 必须要有,我这里面用的是wamp.可视化用的 ...