• 【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实例确定Controller(控制器)
         6)Controller执行
         7)一个视图引擎创建
         8) 视图呈现

    主要流程图如下:

    Capture

    1)RouteTable的创建

    RouteTable的创建发生在mvc应用程序的启动 或者web应用程序池的重启!通常的asp.net程序,一个页面请求对应磁盘上的一个页面!如(http://localhost/index.aspx 对应到服务器磁盘上的文件index.aspx)index.aspx实际上是一个类,由IHttpHandler创建实例化。IHttpHandler包含一个ProcessRequest方法,负责响应页面输出!

    但是mvc application 是不同的,每一个请求映射到route,route 定义在route table,在应用程序启动时创建!

    2)UrlRoutingModule 请求拦截

    每一个Http 请求 都被UrlRoutingModule拦截,UrlRoutingModule提供了当前的HttpContext的routing engine(路由引擎)。HttpContext实例包含当前请求的所有数据。UrlRoutingModule控制着routing engine,提供了HttpContext数据到routing engine! UrlRoutingModule实现了IHttpModule接口,在web.config 文件进行了注册!

    3)Routing engine 确定route

    routing engine基于当前HttpContext确定Route的处理。routing engine 指出route table里面匹配的route ,并在IRouteHandler实例创建route处理!

    4)route handler 创建相关的IHttpHandler实例

    在route table里,每一个route 都与一个IHttpHandler对应。IHttpHandler基于当前的HttpContext数据负责创建一个Controller(控制器)!IHttpHandler是由当前活动的IRouteHandler的GetHttpHandler所创建!

    5)IHttpHandler实例确定Controller(控制器)

    在MVC应用程序中,MvcHandler实现了IHttpHandler,Controller实例,是基于所输入的HttpContext 和Url参数与route 对应的,ControllerFactory 创建一个controller,ControllerContext包含上下文数据,传入到controller的Excute方法,触发controller的逻辑处理!

    MvcHandler主要有一个ControllerBuilder  _controllerBuilder字段;

    6)Controller执行

    所有的controller 逻辑调用执行时,actions请求被执行!当controller的逻辑被执行时,会返回一个ActionResult。一个ActionResult实例,会触发呈现一个View(视图),当触发发生时,一个视图引擎被创建,进行进一步的处理

    7)一个视图引擎创建

    视图引擎实例会创建一个IView接口实例,返回一个ViewEngineResult实例

    8) 视图呈现

    IView实例编译请求视图,提供Render方法调用的数据!

  • 相关阅读:
    07java数组、排序算法
    06方法定义及调用、方法重载、命令行参数、可变参数
    04用户交互scanner
    01IDEA新建一个java程序
    05顺序结构、选择结构、循环、、
    【Linux】symbol lookup error: undefined symbol + nm指令定位错误
    linux命令——crontab的使用方法
    WSL2 Ubuntu固定IP,开机启动SSH
    AArch64下编译及使用sigar
    使用last命令找出是谁重启了你的服务器(linux)
  • 原文地址:https://www.cnblogs.com/jx270/p/4212220.html
Copyright © 2020-2023  润新知