快捷搜索:

MVC 请求生命周期

当一个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的在利用法度榜样的详细应用如下

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);

}

}

2)UrlRoutingModule 哀求拦截

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

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的注册

httpModules>

add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>

httpModules>

您可能还会对下面的文章感兴趣: