-
一、应用程序启动1.Application_Start方法,程序启动
2.RegisterRoutes方法,注册路由
3.System.Web.Mvc.RouteCollectionExtensions.MapRoute方法,出现了MvcRoutehandler对象
二、请求进入
在 “$\Windows\Microsoft.NET\Framework\版本号\Config\Web.config“ 中可以找到 " ”
证明请求会经过System.Web.Routing.UrlRoutingModule.Init方法。
1.System.Web.Routing.UrlRoutingModule.Init方法
2.System.Web.Routing.UrlRoutingModule.PostResolveRequestCache方法
3.System.Web.Routing.RouteCollection.GetRouteData方法
4.System.Web.Routing.Route.GetRouteDara方法
这里的this.RouteHandler就是在第一部分中应用程序启动是实例化好的MvcRouteHandler对象。好了,我们现在已经得到了MvcRouteHandler实例,继续向下走,先返回第2步:
2.System.Web.Routing.UrlRoutingModule.PostResolveRequestCache方法
3. System.Web.Mvc.MvcRouteHandler.GetHttpHandler方法,返回MvcHandler对象
4.System.Web.Mvc.MvcHandler的构成方法
发现这个类实现了IHttpHandler接口,那么不得不去看下ProcessRequest方法
5.System.Web.Mvc.MvcHandler.ProcessRequest方法
6.System.Web.Mvc.MvcHandler.ProcessRequestInit方法
返回到第5步
5.System.Web.Mvc.MvcHandler.ProcessRequest方法
6.System.Web.Mvc.ControllerBase.Excete方法
7.System.Web.Mvc.Controller.ExcuteCore方法
8.System.Web.Mvc.Controller.ActionInvoker属性
9.System.Web.Mvc.Controller.CreateActionInvoker方法
返回了实现IActionInvoker接口的实例,返回第7步
7.System.Web.Mvc.Controller.ExcuteCore方法
8.System.Web.Mvc.ControllerActionInvoker.InvokeAction方法
9.System.Web.Mvc.ControllerActionInvoker.InvokeActionResult方法
10.System.Web.Mvc.ActionResult类,封装一个操作方法的结果
我们来看一下重写了ExcuteResult的ActionResult的派生类:
我们就选ViewResultBase类中的ExcuteResult方法看看
11.System.Web.Mvc.ViewResultBase.ExcuteResult方法
12.System.Web.Mvc.ViewResult.ExcuteResult方法
13.System.Web.Mvc.ViewEngineCollection.FindView方法
14.System.Web.Mvc.VirtualPathProviderViewEngine.FindView方法
返回第13步
13.System.Web.Mvc.ViewEngineCollection.FindView方法
14.System.Web.Mvc.ViewEngineCollection.Find方法
15.System.Web.Mvc.ViewEngineCollection.Find方法
至此,我们得到了ViewEngineResult对象,ViewEngineResult表示定位视图引擎的结果。
现在我们返回第11步,继续向下走
11.System.Web.Mvc.ViewResultBase.ExcuteResult方法
12.System.Web.Mvc.BuildManagerCompiledView.Render方法
13. System.Web.Mvc.RazorView.RenderView方法,在这里使用Razor视图引擎来展示页面
ASP.NET MVC 请求流程
时间: 2024-08-02 19:04:25
ASP.NET MVC 请求流程的相关文章
ASP.NET MVC 请求流程:Controller
1.请求进入时,.NET Framework就找出所有的HttpModule,以此调用它们的Init方法,如下图所示,我们重点关注"UrlRoutingModule-4.0"的HttpModule. 2.我们看看UrlRoutingModule方法中做了哪些操作 . 继续往下看 我们来到了PostResolveRequestCache方法中,我们进入RouteCollection.GetRouteData()方法中看下,如下所示 看过上节的同学会知道这里的routeData就是Syst
.NET MVC请求流程
ASP.NET MVC 请求流程:Controller MvcHandler Action Action参数赋值
ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: 开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init.加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器.那么,在ASP.NET MVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫
ASP.NET MVC的流程讲解
开始想这个标题的时候,很是忧郁到底叫什么标题会比较好哪,最后还是确定为讲解,虽然略显初级,但是很多概念,想通了还是比较有价值的.废话略过,开始! 1.MVC的基本开发流程 2.webform和MVC的选择 3.MVC的内部过程 1.MVC的开发流程 MVC的出现时微软在2009年左右开始提出的网站开发的新的发展方向,这个方面的开发官方解释是可以比较好的实现三层分离,而且分离之后,可以实现复用等相关好处,通常人们列举的例子是ui方面可以同时支持HTML网络或者WAP网络.但是其实个人的理解
ASP.NET MVC深度接触:ASP.NET MVC请求生命周期
这篇博文的目的旨在详细描述ASP.NET MVC 请求从开始到结束的每一个过程.我希望能理解在浏览器输入URL 并敲击回车来请求一个ASP.NET MVC 网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为ASP.NET MVC 是一个扩展性非常强的框架.例如,我们可以插入不同的ViewEngine 来控制网站内容呈现的方式.我们还可以定义控制器生成和分配到某个请求的方式.因为我想发掘任何ASP.NET MVC 页面请求的扩展点,所以我要来探究请求过程中的一些步骤. 其次
【MVC】ASP.NET MVC 请求生命周期
当一个asp.net mvc应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在asp.net mvc应用程序Http request和Http response 过程中,主要包含8个步骤: 1)RouteTable(路由表)的创建 2)UrlRoutingModule 请求拦截 3)Routing engine 确定route 4)route handler 创建相关的IHttpHandler实例 5)IHttpHandler实例确定Contr
Spring MVC请求流程
Spring MVC 发起请求到前端控制器DispathServlet 前端控制器请求处理器映射器 handerMapping查找handler 处理器映射器handerMapping像前端控制器返回handler 处理器映射器调用处理器适配器,去执行handler handler处理完成给处理器适配器返回modelAndView 处理器适配器像前端控制器返回modelView 前端控制器请求试图解析器去进行试图解析 视图解析器像前端控制器返回View 前端控制器进行试图渲染 前端控制器向用户返
ASP.NET MVC请求特殊静态文件返回404 Not Found
今天在请求静态的json档案以及woff2档案,会返回404错误,需要在Web.Config里修改: 1 <system.webServer> 2 <modules> 3 <remove name="FormsAuthentication" /> 4 </modules> 5 <handlers> 6 <add name="MiniProfiler" path="mini-profiler-
asp.net mvc 请求缓慢原因之一(session影响并发)
现象:在网站中,打开一个页面耗时比较严重,进而打开另一个页面进行登录验证,发现多个http请求没有响应和返回值. 在网上所查资料,偶然发现是由于session的锁机制. 原来Session实现了Reader/Writer的锁机制: 当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定. 当页面对Session具有只读功能(即页面有<%@ Pag