用简单的语言解释 MVC 页面生命周期
已发表: 2021-11-26本文将关注 MVC 应用程序的生命周期,以及应用程序如何通过应用程序组件处理请求。 MVC 生命周期中存在两个生命周期。 这两个生命周期是:
- 应用程序生命周期
- 请求生命周期。
目录
应用程序生命周期
应用程序生命周期一般是指应用程序的进程开始运行的时间。 为了表示MVC 应用程序生命周期,标记了应用程序的开始和结束。
请求生命周期
请求生命周期是指应用程序处理 HTTP 请求时发生的一系列事件。 路由是开始任何 MVC 应用程序的入口点。 当向 ASP.NET 平台发出请求时,将决定如何通过路由模块处理请求。 术语模块是指 .NET 的组件,用于在代码中添加功能。 路由模块负责将传入的 URL 与应用程序中定义的相应路由相匹配。 路由处理程序与每个路由相关联,它标志着进入 MVC 框架的点。
MVC 的框架负责处理将路由数据转换为将进一步处理请求的控制器。 控制器创建完成后,下一步就是采取行动。 这是通过动作调用器组件完成的,该组件选择一个动作方法来调用控制器。
一旦对动作结果的准备工作完成,下一步就是结果执行。 为结果执行的结果创建一个分离步骤。 对于视图类型的结果,应用程序将调用视图引擎,它会查找并帮助呈现视图。 如果结果不是视图,则操作将自行执行。 对原始 HTTP 请求生成实际响应的是结果执行。
开发人员知道大多数组件用于处理请求。 在大多数情况下,正在处理与操作相关的方法和控制器。 此外,正在研究不同的行动结果和观点。 但在 MVC 框架内也有其他组件。 关于在处理请求时如何通过不同的组件或 HTTP 模块角色和处理程序执行请求流,可能会有很多问题。 MVC 框架是 Web 开发的框架,框架的 MVC 管道中必须有 HHTP 和 HTTP 处理程序的模块。
MVC 页面生命周期中存在许多组件,除了控制器和操作方法。
网址路由模块
这是一种 HTTP 模块。 每当第一次发出请求时,都会通过 UrlRoutingModule 进行拦截。 在此模块中,将决定 MVC 应用程序是否应处理请求。 UrlRoutingModule 选择匹配的第一个路由。
请求如何通过 UrlRoutingModule 与 MVC 应用程序中存在的那些路由匹配?
查看从 global.asax 调用的 RegisterRoutes 方法,可以看到添加到路由的 RouteCollection 中的路由。 该方法的调用是从 global.asax 的 application_start 处的事件处理程序完成的。
资源
RouteHandler 中的路由是如何定义的?
路由被定义为扩展方法,这可以在 maproute 的方法中看到。 路由处理程序与所有路由相关联。
UrlRoutingModule 的方法定义如下。
资源
通过上面的解释可以知道,UrlRoutingModule 知道应用程序中定义的所有路由。 因此,正确的路由可以与应用程序中的请求匹配。
需要注意的重要一点是模块 UrlRoutingModule 参与选择第一个匹配路由。 因此,只要检测到匹配,扫描过程就会停止。 如果我们总结在这个阶段发生的事情,路由处理程序通过 U RLRRoutingModule 附加到路由。
路由处理程序
通过 maproute 的方法,路由被附加到 MvcRouteHandler 的实例上。 IRouteHandler 接口是通过 MvcRouteHandler 实现的。
因此,MvcRouteHandler 的对象用于获取应用程序的HTTPHandler 的MvcRouteHandler 的事物的引用。
MvcRouteHandler 的创建需要调用 PostResolveRequestCache() 方法。 这个方法 PostResolveRequestCache() 可以通过以下方式定义:
资源
因此,在 PostResolveRequestCache() 方法中会发生以下事件。
- GetRouteData() 方法存在于 RouteCollection 属性中。 该方法被调用并通过 HttpContext 传递。
- RouteData 对象通过GetRouteData() 方法返回。
- RouteHandler 属性包含在为请求返回处理程序 IRouteHandler 的 routeData 中,该处理程序是当前的,即 MvcRouteHandler。
- 方法G etHttpHandler() 与 返回MvcHandler引用的 MvcRouteHandler 。
- 然后将控件委托给 MvcHandler 的实例。
MvcHandler
MvcHandler 是 HTTP 的普通处理程序。 由于它是 HTTP 的处理程序,因此执行 ProcessRequest() 方法。 这个方法 ProcessRequest() 可以定义为:
资源
方法 ProcessRequest() 用于调用 ProcessRequestInit() 方法,如下图所示:
资源
以下事件发生在 ProcessRequest() 方法中。
- ControllerFactory 是通过调用 ProcessRequestInit() 方法创建的。
- ControllerFactory 创建控制器。
- 调用控制器的 Execute() 方法。
控制器工厂
可以观察到ControllerFactory是通过ProcessRequest()方法获得的。 然后使用 ControllerFactory 来创建 Controller 对象的对象。 接口 IControllerFactory 由 Controller 工厂实现。
默认情况下,当 ControllerBuilder 用于创建 ControllerFactory 时,MVC 框架会创建类型 DefaultControllerFactory 类型。
以下代码行在 ProcessRequestInit() 方法中创建 ControllerFactory。
资源
控制器
观察到Controller对象是在MvcHandler的ProcessRequest()方法中的ControllerFactory中创建的。 创建的控制器包含框架要执行的操作的方法。 每当在浏览器中发出 URL 请求时,都会调用该操作的方法。 创建控制器以便没有显式实现 IControlle 的接口。 Controller类用于创建提供多种功能的控制器。 Controller 类可以继承另一个 Controller 类,称为“ControllerBase”,如下所示的代码中定义:
资源
ActionInvoker 用于调用Controller 中动作的方法。
通过控制器工厂创建Controller后会发生以下事件:
- 调用controllerbase的Execute()方法。
- ExecuteCore() 方法由声明为抽象的 Execute() 方法调用,然后通过类 Controller 定义。
- 动作名称由控制器类通过 ExecuteCore() 方法从 RouteData 中检索。
- ActionInvoker 的 InvokeAction() 方法由 ExecuteCore() 方法调用。
动作调用者
它用于选择动作。
ActionInvoker 类有一些重要的职责,包括找到一个动作方法,然后在控制器中调用动作方法。
调用方法 ActionInvoker 的 InvokeAction() 时发生的事件有:
- 有关控制器的信息必须由 ActionInvoker 和需要执行的操作来获取。
- 描述符对象提供此信息。
- 控制器名称和动作名称由动作和控制器的描述符类提供。
- 有调用 ActionMethod 。
动作结果
ActionResult 是抽象类的一种。 作为一种抽象方法,不同子类提供的方法 ExecuteResult() 有不同的实现。
ActionResult 中发生以下事件
- 调用了 ActionFilters 的 OnActionExecuting 方法。
- 调用方法操作。
- 调用 ActionFilters 的 OnActionExecuted 方法。
- ActionMethod 有一个 ActionResult 的返回
- 调用 ActionResult 的方法 ExecuteResult()。
视图引擎
大多数应用程序使用 ViewResult 作为它们的返回类型。 视图通过 ViewEngine 呈现给客户端。 从这个视图中,可以生成 HTML。 HTML 是通过 ViewEngine 从视图生成的。
结论
了解应用程序中每个组件的作用是至关重要的一步。 这样,可以理解组件之间的连接及其工作方式。 如果您想成为一名经验丰富的开发人员,那么掌握您的技能是一种方法。 您可以查看upGrad的在线软件工程课程,该课程将为您提供开发应用程序和软件领域的认证和专家培训。 该课程专为男性和女性工作专业人士设计,并获得 IIIT-B 认证,您将获得他们的校友身份。
应用 MVC 时,应用程序分为三层:数据层或模型、UI 或视图和控制器。 MVC 的每一层都有不同的功能。 首先,UI 或视图层是用户界面。 它是用户和应用程序之间的主要界面。 它负责接收用户输入并呈现结果。 然后控制器连接到视图层中的所有组件,它处理用户输入,将数据发送到模型层,并将结果发送回用户。 模型层是存储数据的地方。 它负责控制数据。 此外,模型层还负责读取和写入数据到存储。 ASP.NET MVC 框架利用了 ASP.NET 会话状态的力量。 会话状态是一种内置于 ASP.NET 平台的 Web 服务。 它负责维护与给定会话关联的所有对象、数据和其他信息。 SessionState 对象维护会话状态的值。 它还负责填充和维护 Session 对象的值。 Session 对象充当会话状态的网关。 它是 SessionState 对象的属性,用于存储和检索会话状态的值。 MVC 中的过滤器位于控制器和模型之间,可用于验证用户输入或修改模型的输出。 以下是 MVC 中的一些过滤器。 1. 验证过滤器 - 验证过滤器有助于验证用户输入。 2. 动作过滤器——动作过滤器有助于修改模型的输出。 3. 模型过滤器——模型过滤器有助于修改模型的输出。 4. 输出过滤器 - 输出过滤器用于修改模型的输出。能解释一下MVC的页面生命周期吗?
我们如何在 MVC 中维护会话?
MVC 中有多少种过滤器?