• ASP.NET MVC 请求流程


    一、应用程序启动

    1.Application_Start方法,程序启动

    image_thumb8

    2.RegisterRoutes方法,注册路由

    image_thumb9

    3.System.Web.Mvc.RouteCollectionExtensions.MapRoute方法,出现了MvcRoutehandler对象

    image_thumb111

    二、请求进入

    在 “$WindowsMicrosoft.NETFramework版本号ConfigWeb.config“ 中可以找到 " <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />”

    证明请求会经过System.Web.Routing.UrlRoutingModule.Init方法。

    1.System.Web.Routing.UrlRoutingModule.Init方法

    image_thumb

    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方法

    image_thumb12

    3. System.Web.Mvc.MvcRouteHandler.GetHttpHandler方法,返回MvcHandler对象

    image_thumb15

    4.System.Web.Mvc.MvcHandler的构成方法

    image_thumb17

    发现这个类实现了IHttpHandler接口,那么不得不去看下ProcessRequest方法

    5.System.Web.Mvc.MvcHandler.ProcessRequest方法

    image_thumb30

    6.System.Web.Mvc.MvcHandler.ProcessRequestInit方法

    image_thumb31

    返回到第5步

    5.System.Web.Mvc.MvcHandler.ProcessRequest方法

    image_thumb32

    6.System.Web.Mvc.ControllerBase.Excete方法

    image_thumb26

    7.System.Web.Mvc.Controller.ExcuteCore方法

    image_thumb33

    8.System.Web.Mvc.Controller.ActionInvoker属性

    image_thumb29

    9.System.Web.Mvc.Controller.CreateActionInvoker方法

    image_thumb28

    返回了实现IActionInvoker接口的实例,返回第7步

    7.System.Web.Mvc.Controller.ExcuteCore方法

    image_thumb27

    8.System.Web.Mvc.ControllerActionInvoker.InvokeAction方法

    image_thumb7

    9.System.Web.Mvc.ControllerActionInvoker.InvokeActionResult方法

    image_thumb91

    10.System.Web.Mvc.ActionResult类,封装一个操作方法的结果

    image_thumb10

    我们来看一下重写了ExcuteResult的ActionResult的派生类:

    image_thumb11

    我们就选ViewResultBase类中的ExcuteResult方法看看

    11.System.Web.Mvc.ViewResultBase.ExcuteResult方法

    image_thumb13

    12.System.Web.Mvc.ViewResult.ExcuteResult方法

    image_thumb21

    13.System.Web.Mvc.ViewEngineCollection.FindView方法

    image_thumb22

    14.System.Web.Mvc.VirtualPathProviderViewEngine.FindView方法

    image_thumb23

    返回第13步

    13.System.Web.Mvc.ViewEngineCollection.FindView方法

    image_thumb24

    14.System.Web.Mvc.ViewEngineCollection.Find方法

    image_thumb18

    15.System.Web.Mvc.ViewEngineCollection.Find方法

    image_thumb19

    至此,我们得到了ViewEngineResult对象,ViewEngineResult表示定位视图引擎的结果。

    现在我们返回第11步,继续向下走

    11.System.Web.Mvc.ViewResultBase.ExcuteResult方法

    image_thumb20

    12.System.Web.Mvc.BuildManagerCompiledView.Render方法

    image_thumb34

    13. System.Web.Mvc.RazorView.RenderView方法,在这里使用Razor视图引擎来展示页面

    image_thumb35

  • 相关阅读:
    SQL Server 添加数据库没有权限等
    网站图片优化的重要性与技巧方案
    5年前端经验小伙伴教你纯css3实现饼状图
    css3 斜切角/斜边的实现方式来自BAT大神的出品
    Validate表单验证插件之常用参数介绍
    html实现邮箱发送邮件_js发送邮件至指定邮箱功能
    css重设样式_清除浏览器的默认样式
    大厂前端工程师教你如何使用css3绘制任意角度扇形+动画
    WordPress教程之如何批量删除未引用(无用)的TAG标签
    css引入的方式有哪些_四种css的引入方式与特点
  • 原文地址:https://www.cnblogs.com/zxj159/p/4108312.html
Copyright © 2020-2023  润新知