科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道详解ASP.NET MVC应用程序请求生命周期

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如(http://localhost/index.aspx  对应到服务器磁盘上的文件index.aspx)index.aspx实际上是一个类,由IHttpHandler创建实例化。一个ActionResult实例,会触发呈现一个View(视图),当触发发生时,一个视图引擎被创建,进行进一步的处理 

来源:DarroldYang博客 2010年4月6日

关键字: 安全

  • 评论
  • 分享微博
  • 分享邮件

  当一个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) 视图呈现

  主要流程图如下:

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的在应用程序的具体使用如下

  publicclassMvcApplication : System.Web.HttpApplication { publicstaticvoid RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", //Route name "{controller}/{action}/{id}", //URL withparameters new{ controller ="Home", action ="Index", id =""} //Parameter defaults ); routes.MapRoute( "Account", //Route name "{controller}/{action}/{id}", //URL withparameters new{ controller ="Account", action ="LogOn", id =""} //Parameter defaults ); } protectedvoid Application_Start() { RegisterRoutes(RouteTable.Routes); } } 2)UrlRoutingModule

  请求拦截

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

  UrlRoutingModule 具体的数据结构如下:

  publicclassUrlRoutingModule : IHttpModule { //主要的 Methods protectedvirtual void Init(HttpApplication application); privatevoid OnApplicationPostMapRequestHandler(objectsender, EventArgs e); privatevoid OnApplicationPostResolveRequestCache(objectsender, EventArgs e); publicvirtual void PostMapRequestHandler(HttpContextBase context); publicvirtual void PostResolveRequestCache(HttpContextBase context); void IHttpModule.Init(HttpApplication application); //Properties publicRouteCollection RouteCollection { getset} } UrlRoutingModule 在WebConfig

  的注册

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

  具体的细节如下

  publicinterfaceIRouteHandler { //Methods IHttpHandler GetHttpHandler(RequestContext requestContext); }

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

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

  MvcHandler主要有一个ControllerBuilder _controllerBuilder字段;

  具体细节如下

  publicclassMvcHandler : IHttpAsyncHandler, IHttpHandler, IRequiresSessionState { //主要的Fields privateControllerBuilder _controllerBuilder; } ControllerBuilder类主要有一个方法GetControllerFactory publicclassControllerBuilder { publicIControllerFactory GetControllerFactory(); } 通过实现IControllerFactory 工厂 创建一个Controller

  6)Controller执行

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

  7)一个视图引擎创建

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

  8) 视图呈现

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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章