本篇文章給大家分享的是有關(guān)如何進(jìn)行ASP.NET MVC應(yīng)用程序執(zhí)行過(guò)程的分析,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
祁東網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),祁東網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為祁東上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的祁東做網(wǎng)站的公司定做!
創(chuàng)建一個(gè)簡(jiǎn)單的ASP.NET MVC應(yīng)用程序
ASP.NET MVC框架提供了支持Visual Studio的工程模板,從而讓你創(chuàng)建支持MVC模式的Web應(yīng)用程序。
這些MVC工程模板包括:
“ASP.NET MVC Web Application”模板
“ASP.NET MVC Web Application and Test”模板
這些模板可以用于創(chuàng)建一個(gè)新的基于ASP.NET MVC框架的Web應(yīng)用程序。在這些程序中,你可以使用文件夾,模板以及配置文件等手段配置它們。
默認(rèn)情況下,當(dāng)你使用“ASP.NET MVC Web Application and Test”模板創(chuàng)建一個(gè)新的Web應(yīng)用程序時(shí),Visual Studio將創(chuàng)建一個(gè)添加有兩個(gè)工程的方案。***個(gè)工程是一個(gè)Web工程,你可以在其中實(shí)現(xiàn)你的應(yīng)用程序。第二個(gè)工程是一個(gè)測(cè)試工程,你可以在此為你的MVC組件編寫單元測(cè)試。
【注意】“ASP.NET MVC Web Application”模板基于“ASP.NET Web Application”模板。所以,在創(chuàng)建基于ASP.NET MVC框架的網(wǎng)站時(shí),你需要從“File”菜單下選擇“New Project”,然后選擇一個(gè)新的ASP.NET MVC工程,而不是選擇“New Website”。
***,你可以使用任何與.NET框架兼容的單元測(cè)試框架來(lái)測(cè)試ASP.NET MVC應(yīng)用程序。注意,Visual Studio 2008 Professional(以及Team System)已經(jīng)提供了對(duì)于MSTest測(cè)試工程的內(nèi)置的支持。
Web應(yīng)用程序的MVC工程架構(gòu)
當(dāng)你創(chuàng)建一個(gè)ASP.NET MVC應(yīng)用程序工程時(shí),諸MVC組件將基于如圖1所示的工程文件夾加以分離:
圖1—一個(gè)ASP.NET MVC應(yīng)用程序的典型架構(gòu)
Views文件夾。該Views文件夾是推薦的放置你的視圖的位置。視圖組件主要使用.aspx,.ascx和.master文件實(shí)現(xiàn);此外,也有可能使用其他任何與視圖有關(guān)聯(lián)的文件。Views文件夾下針對(duì)每一個(gè)控制器都提供一個(gè)獨(dú)立的文件夾,而且此文件夾以該控制器的名字為前綴命名。例如,如果你有一個(gè)名字為HomeController的控制器,那么你的Views文件夾下應(yīng)該包含一個(gè)名字為Home的文件夾。默認(rèn)情況下,當(dāng)ASP.NET MVC框架加載一個(gè)視圖時(shí),它將首先在Views\controllerName文件夾下使用要求的視圖名查找一個(gè)相應(yīng)的.aspx文件。此外,還存在一個(gè)缺省名字為Common的文件夾,不過(guò)它沒(méi)有對(duì)應(yīng)任何控制器。你可以在這個(gè)位置放置母版頁(yè)面,腳本,CSS文件,以及其它當(dāng)生成視圖時(shí)所使用的文件。
Controllers文件夾。Controllers文件夾是推薦的放置控制器的位置。
Models文件夾。該Models文件夾是推薦的放置你的MVC Web應(yīng)用程序的模型的位置。典型情況下,這里會(huì)包括定義與數(shù)據(jù)存儲(chǔ)進(jìn)行交互的邏輯代碼,還有對(duì)象定義等等。
App_Data。App_Data文件夾對(duì)應(yīng)存儲(chǔ)數(shù)據(jù)的物理位置。這個(gè)文件夾與在ASP.NET Web應(yīng)用程序中的角色一樣。
除了上面列舉的文件夾外,一個(gè)MVC Web應(yīng)用程序還使用下列一些重要的應(yīng)用程序元素:
Global.asax和Global.asax.cs。在文件Global.asax.cs的Application_Start方法中實(shí)現(xiàn)對(duì)路由的初始化。下面的代碼展示了一個(gè)典型的Global.asax文件,其中包括了默認(rèn)的路由邏輯。
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { //注意:如果把下列表達(dá)改寫成Url="{controller}.mvc/{action}/{id}"即可自動(dòng)支持IIS6 RouteTable.Routes.Add(new Route { Url = "{controller}/{action}/{id}", Defaults = new { action = "Index", id = (string)null }, RouteHandler = new MvcRouteHandler() }); RouteTable.Routes.Add(new Route { Url = "Default.aspx", Defaults = new { controller = "Home", action = "Index", id = (string)null }, RouteHandler = new MvcRouteHandler() }); } }
配置文件。MVC Web應(yīng)用程序配置文件Web.config負(fù)責(zé)注冊(cè)HTTP模塊。在httpModules節(jié)中實(shí)現(xiàn)注冊(cè)UrlRoutingModule類,這個(gè)類負(fù)責(zé)分析URL并且把請(qǐng)求路由到適當(dāng)?shù)奶幚砥?。注意,這個(gè)入口能夠支持應(yīng)用程序在同一個(gè)工程中宿主MVC與非MVC處理器。
下列代碼展示了一個(gè)ASP.NET MVC應(yīng)用程序的httpModules節(jié)的內(nèi)容:
< httpModules> < add name="UrlRoutingModule" type="System.Web.Mvc.UrlRoutingModule, System.Web.Extensions, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> < /httpModules>
當(dāng)你在Visual Studio 2008 Professional(或Team System)選擇一個(gè)ASP.NET MVC Web應(yīng)用程序和測(cè)試工程模板時(shí),方案中將自動(dòng)包括一個(gè)測(cè)試工程。你可以使用MVC模板來(lái)創(chuàng)建測(cè)試以及內(nèi)在接口的mock實(shí)現(xiàn)。
理解MVC工程的執(zhí)行過(guò)程
一個(gè)發(fā)送到ASP.NET MVC的Web應(yīng)用程序請(qǐng)求首先要傳遞到UrlRoutingModule對(duì)象(這是一個(gè)HTTP模塊)。然后,UrlRoutingModule對(duì)象分析該請(qǐng)求并執(zhí)行路由選擇。值得注意的是,UrlRoutingModule將選擇匹配當(dāng)前請(qǐng)求的***個(gè)路由(Route)對(duì)象。
接下來(lái),UrlRoutingModule對(duì)象從選擇的路由對(duì)象中取得IHttpContext對(duì)象—由它進(jìn)一步處理請(qǐng)求。默認(rèn)情況下,這個(gè)IHttpContext就是MvcHandler對(duì)象。然后,MvcHandler對(duì)象進(jìn)一步選擇相應(yīng)的控制器,最終由此控制器來(lái)處理該請(qǐng)求。
【注意】當(dāng)一個(gè)ASP.NET MVC Web應(yīng)用程序運(yùn)行于IIS7環(huán)境下時(shí),并不要求為MVC工程指定文件的擴(kuò)展名。然而,在IIS6中,處理器要求你把.mvc文件擴(kuò)展名映射到ASP.NET ISAPI中。
模塊和處理器成為指向ASP.NET MVC框架的入口,并執(zhí)行下列動(dòng)作:
◆在一個(gè)MVC Web應(yīng)用程序中選擇適當(dāng)?shù)目刂破?/p>
◆獲取一個(gè)特定的控制器實(shí)例
◆調(diào)用該控制器的Execute方法
表格1更細(xì)致地描述了一個(gè)MVC Web工程的各個(gè)執(zhí)行階段。
表格1—MVC Web工程的各個(gè)執(zhí)行階段
階段 | 詳細(xì)描述 |
初始請(qǐng)求 | 在Global.asax文件中,把路由添加到RouteTable對(duì)象。 |
路由 | UrlRoutingModule模塊根據(jù)RouteTable實(shí)例中匹配的Route對(duì)象創(chuàng)建RouteData對(duì)象。這些路由數(shù)據(jù)用于決定所請(qǐng)求的控制器及要調(diào)用的行為。 |
映射到控制器 | MvcRouteHandler處理器負(fù)責(zé)根據(jù)RouteData實(shí)例中的數(shù)據(jù)創(chuàng)建控制器類型名。 |
調(diào)用控制器構(gòu)建程序(controllerbuilder) | 處理器調(diào)用ControllerBuilder類的全局靜態(tài)CreateController方法從而得到一個(gè)IController實(shí)例。如果沒(méi)有返回一個(gè)IController實(shí)例,那么該處理器將返回一個(gè)HTTP 500錯(cuò)誤指示出現(xiàn)了服務(wù)器錯(cuò)誤。 |
創(chuàng)建控制器 | 由ControllerBuilder實(shí)例直接創(chuàng)建一個(gè)新的控制器,或使用一個(gè)IControllerFactory對(duì)象來(lái)創(chuàng)建該控制器。 |
執(zhí)行控制器 | MvcHandler實(shí)例被添加到ControllerContext對(duì)象中并調(diào)用該控制器的Execute方法。 |
我們對(duì)微軟推出的MVC(模型—視圖—控制器)模式進(jìn)行了理論的剖析,并把它與傳統(tǒng)的ASP.NET Web表單模式和頁(yè)面回寄方案進(jìn)行了對(duì)比。在了解了MVC框架各組件主要功能之后,***我們對(duì)一個(gè)典型的MVC Web工程的各個(gè)執(zhí)行階段作了粗略的歸納。
需要注意的是,ASP.NET MVC模式是微軟***推出的一種開發(fā)模式,目前***測(cè)試版本為Preview 2(Preview 3也即將問(wèn)世)。因此,這一模式是否較之于ASP.NET Web表單模式更有利于提高軟件的生產(chǎn)效率還有待于開發(fā)實(shí)踐的檢驗(yàn)。
以上就是如何進(jìn)行ASP.NET MVC應(yīng)用程序執(zhí)行過(guò)程的分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。