• mvc的生命周期


     

    尽管每次都是从msdn里复制粘贴,但是还是有必要的,加深对mvc的理解和官方的表述。

    了解 MVC 应用程序执行过程

    发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRoutingModule 对象(一个 HTTP 模块)进行传递。 此模块将分析请求并执行路由选择。 UrlRoutingModule 对象将选择与当前请求匹配的第一个路由对象。 (路由对象是实现 RouteBase 的类,并且通常是Route 类的实例。)如果任何路由都不匹配,则 UrlRoutingModule 对象不执行任何操作,并允许请求回退到常规的 ASP.NET 或 IIS 请求处理流程。

    从选定的 Route 对象中,UrlRoutingModule 对象将获得一个对象,所获得的对象将实现 IRouteHandler 接口并与 Route 对象关联。通常,在 MVC 应用程序中,这将是 MvcRouteHandler 类的一个实例。 MvcRouteHandler 实例将创建一个实现 IHttpHandler 接口的MvcHandler 对象。 然后,MvcHandle 对象会选择将最终处理该请求的控制器。 有关更多信息,请参见 ASP.NET 路由

    注意:

    如果 ASP.NET MVC Web 应用程序运行在 IIS 7.0 中,则 MVC 项目不需要文件扩展名。 但是,在 IIS 6.0 中,处理程序要求将 .mvc 文件扩展名映射到 ASP.NET ISAPI DLL。

    UrlRoutingModule 和 MvcRouteHandler 类是 ASP.NET MVC 框架的入口点。 它们执行下列操作:

    • 选择 MVC Web 应用程序中合适的控制器。

    • 获取特定的控制器实例。

    • 调用该控制器的 Execute 方法。

    下表列出了 MVC Web 项目的执行阶段。

    阶段

    详细信息

    接收对应用程序的第一个请求

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

    执行路由

    UrlRoutingModule 模块使用 RouteTable 集合中第一个匹配的 Route 对象来创建 RouteData 对象,然后使用所创建的对象创建 RequestContext 对象。

    创建 MVC 请求处理程序

    MvcRouteHandler 对象将创建 MvcHandler 类的实例,并将 RequestContext 实例传递给处理程序。

    创建控制器

    MvcHandler 对象使用 RequestContext 实例标识用于创建控制器实例的 IControllerFactory 对象(通常是DefaultControllerFactory 类的实例)。

    执行控制器

    MvcHandler 实例调用控制器的 Execute 方法。

    调用操作

    对于从 ControllerBase 类继承的控制器,与该控制器关联的 ControllerActionInvoker 对象将决定要调用的 controller 类的操作方法,然后调用该方法。

    执行结果

    操作方法将接收用户输入,准备合适的响应数据,然后通过返回结果类型来执行结果。 可执行的内置结果类型包括:ViewResult(呈现视图并且是最常用的结果类型)、RedirectToRouteResultRedirectResultContentResultJsonResultFileResult 和 EmptyResult

    mvc的返回值:

    mvc的返回类型:
           ActionResult 初始化 System.Web.Mvc.ActionResult 类的新实例。
    
           ViewResult    创建一个将视图呈现给响应的 ViewResult 对象。
       
           ContentResult 表示用户定义的内容类型,该类型是操作方法的结果。
           
           EmptyResult  表示一个不执行任何操作的结果,如不返回任何内容的控制器操作方法。
    
           HttpUnauthorizedResult 表示未经授权的 HTTP 请求的结果。
    
           JavaScriptResult 将javaScript内容发送到响应。
    
           JsonResult  表示一个类,该类用于将 JSON 格式的内容发送到响应。
           
           FileResult 表示一个用于将二进制文件内容发送到响应的基类。
           
           FileContentResult 将二进制文件的内容发送到响应。
    
           FilePathResult 将文件的内容发送到响应。
    
           FileStreamResult 使用 System.IO.Stream 实例将二进制内容发送到响应。
    
           RedirectResult  返回 System.Web.Mvc.RedirectResult 类的实例,其 Permanent 属性设置为 true。 url:要重定向到的 URL。
    
           RedirectToRouteResult 返回使用指定的路由名称和路由值并且其 Permanent 属性设置为 true 的 RedirectResult 类的实例
    
           ViewResultBase 表示一个用于为视图提供模型并向响应呈现视图的基类。
    
           PartialViewResult 表示一个用于将分部视图发送到响应的基类。
  • 相关阅读:
    JS立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有区别?
    JS闭包和引用
    数据驱动测试二:使用TestNG和CSV文件进行数据驱动
    在SpringTest中将Mockito的mock对象通过spring注入使用
    Mockito各场景使用介绍
    mockito中两种部分mock的实现,spy、callRealMethod
    Docker学习笔记
    Docker实践(二):容器的管理(创建、查看、启动、终止、删除)
    mac 安装 RabbitMQ
    Mac 隐私与安全没有允许任何来源选项
  • 原文地址:https://www.cnblogs.com/yuan-2012/p/4385795.html
Copyright © 2020-2023  润新知