ASP.NET MVC框架提供了支持Visual Studio的工程模板。本文介绍ASP.NET MVC应用程序的执行过程分析。

创立一个简略的ASP.NET MVC应用程序

ASP.NET MVC结构供给了支撑Visual Studio的工程模板,然后让你创立支撑MVC形式的Web应用程序。

这些MVC工程模板包含:

“ASP.NET MVC Web Application”模板

“ASP.NET MVC Web Application and Test”模板

这些模板能够用于创立一个新的依据ASP.NET MVC结构的Web应用程序。在这些程序中,你能够运用文件夹,模板以及装备文件等手法装备它们。

默许情况下,当你运用“ASP.NET MVC Web Application and Test”模板创立一个新的Web应用程序时,Visual Studio将创立一个增加有两个工程的计划。***个工程是一个Web工程,你能够在其间完成你的应用程序。第二个工程是一个测验工程,你能够在此为你的MVC组件编写单元测验。

【留意】“ASP.NET MVC Web Application”模板依据“ASP.NET Web Application”模板。所以,在创立依据ASP.NET MVC结构的网站时,你需求从“File”菜单下挑选“New Project”,然后挑选一个新的ASP.NET MVC工程,而不是挑选“New Website”。

***,你能够运用任何与.NET结构兼容的单元测验结构来测验ASP.NET MVC应用程序。留意,Visual Studio 2008 Professional(以及Team System)现已供给了关于MSTest测验工程的内置的支撑。

Web应用程序的MVC工程架构

当你创立一个ASP.NET MVC应用程序工程时,诸MVC组件将依据如图1所示的工程文件夹加以别离:

ASP.NET MVC应用程序履行进程剖析(asp.net mvc各部分的职责和执行过程)  MVC应用程序 第1张

图1—一个ASP.NET MVC应用程序的典型架构

Views文件夹。该Views文件夹是引荐的放置你的视图的方位。视图组件首要运用.aspx,.ascx和.master文件完成;此外,也有或许运用其他任何与视图有相关的文件。Views文件夹下针对每一个控制器都供给一个独立的文件夹,而且此文件夹以该控制器的姓名为前缀命名。例如,假如你有一个姓名为HomeController的控制器,那么你的Views文件夹下应该包含一个姓名为Home的文件夹。默许情况下,当ASP.NET MVC结构加载一个视图时,它将首先在Views\controllerName文件夹下运用要求的视图名查找一个相应的.aspx文件。此外,还存在一个缺省姓名为Common的文件夹,不过它没有对应任何控制器。你能够在这个方位放置母版页面,脚本,CSS文件,以及其它当生成视图时所运用的文件。

Controllers文件夹。Controllers文件夹是引荐的放置控制器的方位。

Models文件夹。该Models文件夹是引荐的放置你的MVC Web应用程序的模型的方位。典型情况下,这里会包含界说与数据存储进行交互的逻辑代码,还有目标界说等等。

App_Data。App_Data文件夹对应存储数据的物理方位。这个文件夹与在ASP.NET Web应用程序中的人物相同。

除了上面罗列的文件夹外,一个MVC Web应用程序还运用下列一些重要的应用程序元素:

Global.asax和Global.asax.cs。在文件Global.asax.cs的Application_Start办法中完成对路由的初始化。下面的代码展现了一个典型的Global.asax文件,其间包含了默许的路由逻辑。

  1. publicclassGlobal:System.Web.HttpApplication
  2. {
  3. protectedvoidApplication_Start(objectsender,EventArgse)
  4. {
  5. //留意:假如把下列表达改写成Url="{controller}.mvc/{action}/{id}"即可主动支撑IIS6
  6. RouteTable.Routes.Add(newRoute
  7. {
  8. Url="{controller}/{action}/{id}",
  9. Defaults=new{action="Index",id=(string)null},
  10. RouteHandler=newMvcRouteHandler()
  11. });
  12. RouteTable.Routes.Add(newRoute
  13. {
  14. Url="Default.aspx",
  15. Defaults=new{controller="Home",action="Index",id=(string)null},
  16. RouteHandler=newMvcRouteHandler()
  17. });
  18. }
  19. }

装备文件。MVC Web应用程序装备文件Web.config担任注册HTTP模块。在httpModules节中完成注册UrlRoutingModule类,这个类担任分析URL而且把恳求路由到恰当的处理器。留意,这个进口能够支撑应用程序在同一个工程中宿主MVC与非MVC处理器。

下列代码展现了一个ASP.NET MVC应用程序的httpModules节的内容:

  1. <httpModules>
  2. <addname="UrlRoutingModule"
  3. type="System.Web.Mvc.UrlRoutingModule,
  4. System.Web.Extensions,Version=3.6.0.0,Culture=neutral,
  5. PublicKeyToken=31BF3856AD364E35"/>
  6. </httpModules>

当你在Visual Studio 2008 Professional(或Team System)挑选一个ASP.NET MVC Web应用程序和测验工程模板时,计划中将主动包含一个测验工程。你能够运用MVC模板来创立测验以及内涵接口的mock完成。

了解MVC工程的履行进程

一个发送到ASP.NET MVC的Web应用程序恳求首先要传递到UrlRoutingModule目标(这是一个HTTP模块)。然后,UrlRoutingModule目标分析该恳求并履行路由挑选。值得留意的是,UrlRoutingModule将挑选匹配当时恳求的***个路由(Route)目标。

接下来,UrlRoutingModule目标从挑选的路由目标中获得IHttpContext目标—由它进一步处理恳求。默许情况下,这个IHttpContext便是MvcHandler目标。然后,MvcHandler目标进一步挑选相应的控制器,终究由此控制器来处理该恳求。

【留意】当一个ASP.NET MVC Web应用程序运转于IIS7环境下时,并不要求为MVC工程指定文件的扩展名。但是,在IIS6中,处理器要求你把.mvc文件扩展名映射到ASP.NET ISAPI中。

模块和处理器成为指向ASP.NET MVC结构的进口,并履行下列动作:

◆在一个MVC Web应用程序中挑选恰当的控制器

◆获取一个特定的控制器实例

◆调用该控制器的Execute办法

表格1更详尽地描绘了一个MVC Web工程的各个履行阶段。

表格1—MVC Web工程的各个履行阶段

阶段

详细描绘

初始恳求

Global.asax文件中,把路由增加到RouteTable目标。

路由

UrlRoutingModule模块依据RouteTable实例中匹配的Route目标创立RouteData目标。这些路由数据用于决议所恳求的控制器及要调用的行为。

映射到控制器

MvcRouteHandler处理器担任依据RouteData实例中的数据创立控制器类型名。

调用控制器构建程序(controllerbuilder

处理器调用ControllerBuilder类的大局静态CreateController办法然后得到一个IController实例。假如没有回来一个IController实例,那么该处理器将回来一个HTTP 500过错指示呈现了服务器过错。

创立控制器

ControllerBuilder实例直接创立一个新的控制器,或运用一个IControllerFactory目标来创立该控制器。

履行控制器

MvcHandler实例被增加到ControllerContext目标中并调用该控制器的Execute办法。

小结

在本文中,咱们对微软***推出的MVC(模型—视图—控制器)形式进行了理论的分析,并把它与传统的ASP.NET Web表单形式和页面回寄计划进行了比照。在了解了MVC结构各组件首要功用之后,***咱们对一个典型的MVC Web工程的各个履行阶段作了大略的概括。

***需求留意的是,ASP.NET MVC形式是微软***推出的一种开发形式,现在***测验版别为Preview 2(Preview 3也行将面世)。因而,这一形式是否较之于ASP.NET Web表单形式更有利于进步软件的出产功率还有待于开发实践的查验。

本文来自朱先忠的博客:《ASP.NET 3.5 MVC结构深度解析》。

【修改引荐】

  1. 有关ASP.NET MVC结构的一些基础知识
  2. Scott Gu教你运用ASP.NET MVC 2新功用
  3. 微软发布ASP.NET MVC 2预览版 多项功用更新
  4. 13个不行不知的ASP.NET MVC扩展点
  5. 学习ASP.NET MVC的基本概念
转载请说明出处
知优网 » ASP.NET MVC应用程序履行进程剖析(asp.net mvc各部分的职责和执行过程)

发表评论

您需要后才能发表评论