知识大全 详解ASP.NET MVC应用程序请求生命周期

Posted 视图

篇首语:不磨不炼,不成好汉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 详解ASP.NET MVC应用程序请求生命周期相关的知识,希望对你有一定的参考价值。

详解ASP.NET MVC应用程序请求生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  当一个ASP NET MVC应用程序提出请求 为了响应请求 包含一些请求执行流程步骤! 在ASP NET MVC应用程序Http request

  和Http response 过程中 主要包含 个步骤:

   )RouteTable(路由表)的创建

   )UrlRoutingModule 请求拦截

   )Routing engine 确定route

   )route handler 创建相关的IHttpHandler实例

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

   )Controller执行

   )一个视图引擎创建

   ) 视图呈现

  主要流程图如下:  

   )RouteTable的创建

  RouteTable的创建发生在mvc应用程序的启动 或者web应用程序池的重启!通常的程序       一个页面请求对应磁盘上的一个页面!如(x

  对应到服务器磁盘上的文件index aspx)index aspx实际上是一个类 由IHttpHandler创建实例化

  IHttpHandler包含一个

  ProcessRequest方法 负责响应页面输出!

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

  RouteTable的在应用程序的具体使用如下      public class MvcApplication :        System Web HttpApplication                           public static void RegisterRoutes(RouteCollection routes)                    routes IgnoreRoute( resource axd/*pathInfo );          routes MapRoute(    Default   // Route name    controller/action/id         // URL with parameters    new controller = Home action = Index id =          // Parameter defaults    );           routes MapRoute(   Account   // Route name   controller/action/id          // URL with parameters   new controller = Account action = LogOn id =      // Parameter defaults   );                        protected void Application_Start()                         RegisterRoutes(RouteTable Routes);                                  )UrlRoutingModule 请求拦截

  每一个Http 请求 都被UrlRoutingModule拦截 UrlRoutingModule提供了当前的HttpContext的 

  routingengine(路由引擎)                HttpContext实例包含当前请求的所有数据 UrlRoutingModule控制着routing engine

  提供了HttpContext数据到routing engine! UrlRoutingModule实现了IHttpModule接口 在nfig 文件进行

  了注册!

  UrlRoutingModule 具体的数据结构如下

  public class UrlRoutingModule : IHttpModule                                            // 主要的 Methods                        protected virtual void Init(HttpApplication application);                     private void OnApplicationPostMapRequestHandler(object sender EventArgs e);                      private void OnApplicationPostResolveRequestCache(object sender EventArgs e);                      public virtual void PostMapRequestHandler(HttpContextBase context);                     public virtual void PostResolveRequestCache(HttpContextBase context);                    void IHttpModule Init(HttpApplication application);                       // Properties     public RouteCollection RouteCollection get; set;                                   UrlRoutingModule 在WebConfig的注册                  <Modules> <add name= UrlRoutingModule type= System Web Routing UrlRoutingModule    

  System Web Routing Version=   Culture=neutral PublicKeyToken= BF AD E />             </Modules>

   )Routing engine 确定route

  routing engine基于当前HttpContext确定Route的处理 routing engine 指出route table里面匹配的route 并

  在 IRouteHandler实例创建route处理!

   )route handler 创建相关的IHttpHandler实例在route table里 每一个route 都与一个IHttpHandler对应          IHttpHandler基于当前的HttpContext数据负责创建一个Controller(控制器)!IHttpHandler是由当前活动的

  IRouteHandler的GetHttpHandler所创建!

  具体的细节如下

  public interface IRouteHandler 

  

  // Methods  IHttpHandler GetHttpHandler(RequestContext    requestContext);

  

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

  在MVC应用程序中 MvcHandler实现了IHttpHandler Controller实例 是基于所输入的HttpContext 

  和Url参数 与route 对应的           ControllerFactory 创建一个controller ControllerContext包含上下文数据 传入到controller的Excute方法

  触发 controller的逻辑处理!

  MvcHandler主要有一个ControllerBuilder  _controllerBuilder字段;

  具体细节如下

  public class MvcHandler : IHttpAsyncHandler IHttpHandler IRequiresSessionState                                 // 主要的Fields  private ControllerBuilder _controllerBuilder;                              ControllerBuilder类主要有一个方法GetControllerFactory             public class ControllerBuilder                            public IControllerFactory GetControllerFactory();                       通过实现IControllerFactory 工厂 创建一个Controller

   )Controller执行

  所有的controller 逻辑调用执行时 actions请求被执行!当controller的逻辑被执行时 会返回一个

  ActionResult                一个ActionResult实例 会触发呈现一个View(视图) 当触发发生时 一个视图引擎被创建 进行进一

  步的处   理

   )一个视图引擎创建

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

   ) 视图呈现

cha138/Article/program/net/201311/12318

相关参考

知识大全 IIS处理Asp.net请求和 Asp.net页面生命周期

IIS处理Asp.net请求和Asp.net页面生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 详解ASP.NET MVC PRG数据验证

详解ASP.NETMVCPRG数据验证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们这里将

知识大全 Asp.Net页面生命周期

Asp.Net页面生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们都知道浏览器的作用

知识大全 ASP.NET MVC创建TaskList应用程序

ASP.NETMVC创建TaskList应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!如果

知识大全 ASP.NET MVC上的Web应用

ASP.NETMVC4框架:ASP.NETMVC上的Web应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 两个粒度看Asp.net生命周期

两个粒度看Asp.net生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于页面层开发无

知识大全 在Azure云中部署支持MVC的ASP.NET程序

在Azure云中部署支持MVC的ASP.NET程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 基于ASP.NET MVC框架开发Web论坛应用程序[1]

基于ASP.NETMVC框架开发Web论坛应用程序[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 基于ASP.NET MVC框架开发Web论坛应用程序[3]

基于ASP.NETMVC框架开发Web论坛应用程序[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 基于ASP.NET MVC框架开发Web论坛应用程序[2]

基于ASP.NETMVC框架开发Web论坛应用程序[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下