asp.net MVC 源码分析

先上一张图吧 asp.net请求机制的图  by传智播客邹华栋老师

然后是 邹老师添加MVC请求过程的图

其实MVC 实在.netframework上加了一个过滤器  HttpModule 在C:\Windows\Microsoft.NET\Framework\v4.0.30319

下的配置文件里加入的  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />

网站在第一次请求的时候会把这个类 创建出来调用其Init()方法  注册到事件管道上

1浏览器通过报文发送http请求 到服务器IIS

2IIS 把请求交给扩展模块ASPNET_ISAPI.dll (C++写的非托管程序,相当于IIS与framework的中间程序)

3 framework创建Httpcontext请求上下文 (request/response/session/application/cookie/server...)

4通过HttpApplicationFactory 工厂创建HttpApplicaiton 调用它的PR方法 (事件管道)

5 第七个事件创建MvcHanlder 存入HttpContext的私有属性remapHandler里(可以通过.net reflector看到)

6第八个事件就是判断这个remapHandler里是不是为空 如果不是为空的话就 Httpcontent.RemapHandler(mvcHandler);

7在11/12方法之间执行MvcHandler的PR方法创建控制器对象

时间: 2024-10-01 04:40:35

asp.net MVC 源码分析的相关文章

asp.net mvc源码分析-ModelValidatorProviders 客户端的验证

几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, 首先我们要知道这里的data-val这些属性是在哪里生成的?可以肯定是在mvc后台生成的, @Html.PasswordFor(m => m.Password) 生成input @Html.ValidationMessageFor(m => m.Password) 生成span 调用层级关系:

asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证

原文:asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证 在前面的文章中我们曾经涉及到ControllerActionInvoker类GetParameterValue方法中有这么一句代码: ModelBindingContext bindingContext = new ModelBindingContext() { FallbackToEmptyPrefix = (parameterDescriptor.BindingInfo.Prefix

ASP.NET MVC 源码分析(一)

ASP.NET MVC 源码分析(一) 直接上图: 我们先来看Core的设计: 从项目结构来看,asp.net.mvc.core有以下目录: ActionConstraints:action限制相关 AntiForgery:防伪相关 ActionResults:action返回对象相关 ApiExplorer:API描述和元数据相关接口 ApplicationModels:应用程序模型相关,应该是全局的model Areas:地区标签 Filters:大名鼎鼎的过滤器组件 Formatters:

ASP.NET MVC 源码分析(二) —— 从 IRouteBuilder认识路由构建

我们来看IRouteBuilder的定义: public interface IRouteBuilder { IRouter DefaultHandler { get; set; } IServiceProvider ServiceProvider { get; } IList<IRouter> Routes { get; } IRouter Build(); } 一个默认的IRouter对象,一个Build方法,一个IRouter集合和一个获取服务对象IServiceProvider. 我们

ASP.NET MVC源码分析系列

Controller下的JsonResult的ExecuteResult方法 public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } if ((this.JsonRequestBehavior == JsonRequestBehavior.DenyGet) &&

asp.net mvc源码分析-Action篇 IModelBinder

我们首先还是看看ReflectedParameterBindingInfo的Binder属性吧: public override IModelBinder Binder {            get {                IModelBinder binder = ModelBinders.GetBinderFromAttributes(_parameterInfo,                    () => String.Format(CultureInfo.Curre

WebForm / MVC 源码分析

ASP.NET WebForm / MVC 源码分析 浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送给服务器) 1:服务器(内核模式 Http.sys)对请求报文做基本的处理 2:请求服务器(用户模式,IIS服务器) 2.1:对发送过来的数据做一个检查,如果请求的是静态资源的(.html,jpg,js),那么IIS直接将这些资源返回浏览器 2.

Asp.Net MVC源码调试

首先下载MVC源代码,下载地址为:https://aspnetwebstack.codeplex.com/ 打开项目,卸载test文件夹下的所有项目和System.Web.WebPages.Administration这个项目,然后重新编译源代码,重新生成所有项目. 在项目中新建一个空的Web项目,包含基本的MVC组件 删除项目中的如下程序集的引用 添加项目中MVC项目源码的引用 查询MVC源码的版本信息 可以看到当前源码的版本为5.2.4.0 打开新建项目中的所有Web.config文件,修改

ASP.NET WebForm / MVC 源码分析

浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送给服务器) 1:服务器(内核模式 Http.sys)对请求报文做基本的处理 2:请求服务器(用户模式,IIS服务器) 2.1:对发送过来的数据做一个检查,如果请求的是静态资源的(.html,jpg,js),那么IIS直接将这些资源返回浏览器 2.2:如果是动态资源(.aspx,.ashx),IIS服