详解ASP.NETMVC应用程序请求生命周期

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

创新互联公司2013年成立,先为阜南等服务建站,阜南等地企业,进行企业商务咨询服务。为阜南企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

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

1)RouteTable(路由表)的创建

2)UrlRoutingModule 请求拦截

3)Routing engine 确定route

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

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

6)Controller执行

7)一个视图引擎创建

8) 视图呈现

主要流程图如下:

1)RouteTable的创建

RouteTable的创建发生在mvc应用程序的启动 或者web应用程序池的重启!通常的asp.net程序,一个页面请求对应磁盘上的一个页面!如(http://localhost/index.aspx

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

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

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

RouteTable的在应用程序的具体使用如下

 
 
 
 
  1. public class MvcApplication : System.Web.HttpApplication
  2.   {
  3.   public static void RegisterRoutes(RouteCollection routes)
  4.   {
  5.   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  6.   routes.MapRoute(
  7.   "Default",  // Route name
  8.   "{controller}/{action}/{id}",   // URL with parameters
  9.   new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
  10.   );
  11.   routes.MapRoute(
  12.  "Account",  // Route name
  13.  "{controller}/{action}/{id}",   // URL with parameters
  14.  new { controller = "Account", action = "LogOn", id = "" }  // Parameter defaults
  15.  );
  16.  
  17.   }
  18.   protected void Application_Start()
  19.   {
  20.   RegisterRoutes(RouteTable.Routes);
  21.   }
  22.   }

2)UrlRoutingModule 请求拦截

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

UrlRoutingModule 具体的数据结构如下:

 
 
 
 
  1. public class UrlRoutingModule : IHttpModule
  2.   {
  3.    // 主要的 Methods
  4.    protected virtual void Init(HttpApplication application);
  5.    private void OnApplicationPostMapRequestHandler(object sender, EventArgs e);
  6.    private void OnApplicationPostResolveRequestCache(object sender, EventArgs e);
  7.    public virtual void PostMapRequestHandler(HttpContextBase context);
  8.    public virtual void PostResolveRequestCache(HttpContextBase context);
  9.    void IHttpModule.Init(HttpApplication application);
  10.    // Properties
  11.    public RouteCollection RouteCollection { get; set; }
  12.    }
  13. UrlRoutingModule 在WebConfig的注册
  14.    
  15. System.Web.Routing, Version=3.5.0.0,
  16.  Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>
  17.    

 

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所创建!

具体的细节如下

  
 
 
 
  1. public interface IRouteHandler
  2. {
  3. // Methods
  4. IHttpHandler GetHttpHandler(RequestContext requestContext);
  5. }

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

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

MvcHandler主要有一个ControllerBuilder  _controllerBuilder字段;

具体细节如下

 
 
 
 
  1.  public class MvcHandler : IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
  2. {
  3. // 主要的Fields
  4. private ControllerBuilder _controllerBuilder;
  5. }
  6. ControllerBuilder类主要有一个方法GetControllerFactory
  7. public class ControllerBuilder
  8. {
  9.   public IControllerFactory GetControllerFactory();
  10. }

通过实现IControllerFactory 工厂 创建一个Controller

6)Controller执行

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

7)一个视图引擎创建

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

8) 视图呈现

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

链接:http://www.cnblogs.com/skyyang/archive/2010/04/02/1702769.html

当前名称:详解ASP.NETMVC应用程序请求生命周期
网站路径:http://www.gawzjz.com/qtweb2/news1/10051.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联