• .NET MVC执行过程 及 生命周期步骤


      1、网址路由比对

    2、执行Controller与Action

    3、执行View并返回结果

    1. Request 请求到来
    2. IIS 根据请求特征将处理权移交给 ASP.NET
    3. UrlRoutingModule将当前请求在 Route Table中进行匹配
    4. UrlRoutingModuleRouteCollection中查找Request匹配的RouteHandler,默认是MvcRouteHandler MvcRouteHandler 创建 MvcHandler实例.
    5.  MvcHandler执行 ProcessRequest.
    6.  MvcHandler 使用 IControllerFactory 获得实现了IController接口的实例,找到对应的HomeController
    7.  根据Request触发HomeControllerIndex方法
    8. Index将执行结果存放在ViewData
    9. HomeControllerIndex方法返回 ActionResult
    10. Views/Home/Index.aspx ViewData呈现在页面上
    11. Index.aspx执行ProcessRequest方法
    12. Index.aspx执行Render方法 输出到客户端

    在使用MVC中是由IgnoreRoute()辅助方法对比成功的,会导致程序直接跳离MVC的执行生命周期,将程序继续执行的权利交回给IIS,由IIS决定接下来应该由哪个模块或哪个处理例程(Handler)来执行。

    阶段

    详细

    接收应用程序的第一次请求

    在Global.asax文件中, Route对象 被添加到RouteTable对象.

    执行路由选择

    UrlRoutingModule 模块使用第一个在RouteTable 集合中匹配的Route 对象来创建RouteData对象, 然后它将使用这个RouteData对象来创建RequestContext (IHttpContext)对象.

    创建MVC request handler

    MvcRouteHandler 创建MvcHandler类的一个实例,并且将它传递给RequestContext实例.

    创建controller

    MvcHandler对象使用RequestContext实例来确认IControllerFactory 对象(DefaultControllerFactory类的一个实例) ,以用来创建conteoller实例。

    执行controller

    MvcHandler 实例调用controller的执行method.

    调用action

    大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.

    执行result

    大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.

     

    生命周期步骤概览

    当我们对ASP.NET MVC网站发出一个请求的时候,会发生5个主要步骤:

    步骤1:创建RouteTable

    当ASP.NET应用程序第一次启动的时候才会发生第一步。RouteTable把URL映射到Handler。

    步骤2:UrlRoutingModule拦截请求

    第二步在我们发起请求的时候发生。UrlRoutingModule拦截了每一个请求并且创建和执行合适的Handler。

    步骤3:执行MvcHandler

    MvcHandler创建了控制器,并且把控制器传入ControllerContext,然后执行控制器。

    步骤4:执行控制器

    控制器检测要执行的控制器方法,构建参数列表并且执行方法。

    步骤5:调用RenderView方法

    大多数情况下,控制器方法调用RenderView()来把内容呈现回浏览器。

    Controller.RenderView()方法把这个工作委托给某个ViewEngine来做。

  • 相关阅读:
    JVM三部曲之运行时数据区 (第一部)
    c++鼠标点点,获取坐标值,放入到txt文件中
    自己实现的SVM源码
    SVM资料
    caffe源码解析
    caffe调试小结2
    caffe中卷积层和pooling层计算下一层的特征map的大小
    gpu对任意长度的矢量求和
    caffe代码调试小结
    caffe添加自己的层
  • 原文地址:https://www.cnblogs.com/junny/p/5195487.html
Copyright © 2020-2023  润新知