成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET MVC應(yīng)用程序執(zhí)行過程分析

開發(fā) 后端
ASP.NET MVC框架提供了支持Visual Studio的工程模板。本文介紹ASP.NET MVC應(yīng)用程序的執(zhí)行過程分析。

創(chuàng)建一個簡單的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)建一個新的基于ASP.NET MVC框架的Web應(yīng)用程序。在這些程序中,你可以使用文件夾,模板以及配置文件等手段配置它們。

默認情況下,當(dāng)你使用“ASP.NET MVC Web Application and Test”模板創(chuàng)建一個新的Web應(yīng)用程序時,Visual Studio將創(chuàng)建一個添加有兩個工程的方案。***個工程是一個Web工程,你可以在其中實現(xiàn)你的應(yīng)用程序。第二個工程是一個測試工程,你可以在此為你的MVC組件編寫單元測試。

【注意】“ASP.NET MVC Web Application”模板基于“ASP.NET Web Application”模板。所以,在創(chuàng)建基于ASP.NET MVC框架的網(wǎng)站時,你需要從“File”菜單下選擇“New Project”,然后選擇一個新的ASP.NET MVC工程,而不是選擇“New Website”。

***,你可以使用任何與.NET框架兼容的單元測試框架來測試ASP.NET MVC應(yīng)用程序。注意,Visual Studio 2008 Professional(以及Team System)已經(jīng)提供了對于MSTest測試工程的內(nèi)置的支持。

Web應(yīng)用程序的MVC工程架構(gòu)

當(dāng)你創(chuàng)建一個ASP.NET MVC應(yīng)用程序工程時,諸MVC組件將基于如圖1所示的工程文件夾加以分離:

工程文件夾

圖1—一個ASP.NET MVC應(yīng)用程序的典型架構(gòu)

Views文件夾。該Views文件夾是推薦的放置你的視圖的位置。視圖組件主要使用.aspx,.ascx和.master文件實現(xiàn);此外,也有可能使用其他任何與視圖有關(guān)聯(lián)的文件。Views文件夾下針對每一個控制器都提供一個獨立的文件夾,而且此文件夾以該控制器的名字為前綴命名。例如,如果你有一個名字為HomeController的控制器,那么你的Views文件夾下應(yīng)該包含一個名字為Home的文件夾。默認情況下,當(dāng)ASP.NET MVC框架加載一個視圖時,它將首先在Views\controllerName文件夾下使用要求的視圖名查找一個相應(yīng)的.aspx文件。此外,還存在一個缺省名字為Common的文件夾,不過它沒有對應(yīng)任何控制器。你可以在這個位置放置母版頁面,腳本,CSS文件,以及其它當(dāng)生成視圖時所使用的文件。

Controllers文件夾。Controllers文件夾是推薦的放置控制器的位置。

Models文件夾。該Models文件夾是推薦的放置你的MVC Web應(yīng)用程序的模型的位置。典型情況下,這里會包括定義與數(shù)據(jù)存儲進行交互的邏輯代碼,還有對象定義等等。

App_Data。App_Data文件夾對應(yīng)存儲數(shù)據(jù)的物理位置。這個文件夾與在ASP.NET Web應(yīng)用程序中的角色一樣。

除了上面列舉的文件夾外,一個MVC Web應(yīng)用程序還使用下列一些重要的應(yīng)用程序元素:

Global.asax和Global.asax.cs。在文件Global.asax.cs的Application_Start方法中實現(xiàn)對路由的初始化。下面的代碼展示了一個典型的Global.asax文件,其中包括了默認的路由邏輯。

  1. public class Global : System.Web.HttpApplication  
  2.  {  
  3.    protected void Application_Start(object sender, EventArgs e)  
  4.    {  
  5.      //注意:如果把下列表達改寫成Url="{controller}.mvc/{action}/{id}"即可自動支持IIS6  
  6.    
  7.      RouteTable.Routes.Add(new Route  
  8.      {  
  9.        Url = "{controller}/{action}/{id}",  
  10.        Defaults = new { action = "Index", id = (string)null },  
  11.        RouteHandler = new MvcRouteHandler()  
  12.      });  
  13.    
  14.      RouteTable.Routes.Add(new Route  
  15.      {  
  16.        Url = "Default.aspx",  
  17.        Defaults = new { controller = "Home", action = "Index", id = (string)null },  
  18.        RouteHandler = new MvcRouteHandler()  
  19.      });  
  20.    }  
  21.  } 

配置文件。MVC Web應(yīng)用程序配置文件Web.config負責(zé)注冊HTTP模塊。在httpModules節(jié)中實現(xiàn)注冊UrlRoutingModule類,這個類負責(zé)分析URL并且把請求路由到適當(dāng)?shù)奶幚砥?。注意,這個入口能夠支持應(yīng)用程序在同一個工程中宿主MVC與非MVC處理器。

下列代碼展示了一個ASP.NET MVC應(yīng)用程序的httpModules節(jié)的內(nèi)容:

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

當(dāng)你在Visual Studio 2008 Professional(或Team System)選擇一個ASP.NET MVC Web應(yīng)用程序和測試工程模板時,方案中將自動包括一個測試工程。你可以使用MVC模板來創(chuàng)建測試以及內(nèi)在接口的mock實現(xiàn)。

理解MVC工程的執(zhí)行過程

一個發(fā)送到ASP.NET MVC的Web應(yīng)用程序請求首先要傳遞到UrlRoutingModule對象(這是一個HTTP模塊)。然后,UrlRoutingModule對象分析該請求并執(zhí)行路由選擇。值得注意的是,UrlRoutingModule將選擇匹配當(dāng)前請求的***個路由(Route)對象。

接下來,UrlRoutingModule對象從選擇的路由對象中取得IHttpContext對象—由它進一步處理請求。默認情況下,這個IHttpContext就是MvcHandler對象。然后,MvcHandler對象進一步選擇相應(yīng)的控制器,最終由此控制器來處理該請求。

【注意】當(dāng)一個ASP.NET MVC Web應(yīng)用程序運行于IIS7環(huán)境下時,并不要求為MVC工程指定文件的擴展名。然而,在IIS6中,處理器要求你把.mvc文件擴展名映射到ASP.NET ISAPI中。

模塊和處理器成為指向ASP.NET MVC框架的入口,并執(zhí)行下列動作:

◆在一個MVC Web應(yīng)用程序中選擇適當(dāng)?shù)目刂破?/P>

◆獲取一個特定的控制器實例

◆調(diào)用該控制器的Execute方法

表格1更細致地描述了一個MVC Web工程的各個執(zhí)行階段。

表格1—MVC Web工程的各個執(zhí)行階段

階段

詳細描述

初始請求

Global.asax文件中,把路由添加到RouteTable對象。

路由

UrlRoutingModule模塊根據(jù)RouteTable實例中匹配的Route對象創(chuàng)建RouteData對象。這些路由數(shù)據(jù)用于決定所請求的控制器及要調(diào)用的行為。

映射到控制器

MvcRouteHandler處理器負責(zé)根據(jù)RouteData實例中的數(shù)據(jù)創(chuàng)建控制器類型名。

調(diào)用控制器構(gòu)建程序(controllerbuilder

處理器調(diào)用ControllerBuilder類的全局靜態(tài)CreateController方法從而得到一個IController實例。如果沒有返回一個IController實例,那么該處理器將返回一個HTTP 500錯誤指示出現(xiàn)了服務(wù)器錯誤。

創(chuàng)建控制器

ControllerBuilder實例直接創(chuàng)建一個新的控制器,或使用一個IControllerFactory對象來創(chuàng)建該控制器。

執(zhí)行控制器

MvcHandler實例被添加到ControllerContext對象中并調(diào)用該控制器的Execute方法。

 

小結(jié)

在本文中,我們對微軟***推出的MVC(模型—視圖—控制器)模式進行了理論的剖析,并把它與傳統(tǒng)的ASP.NET Web表單模式和頁面回寄方案進行了對比。在了解了MVC框架各組件主要功能之后,***我們對一個典型的MVC Web工程的各個執(zhí)行階段作了粗略的歸納。

***需要注意的是,ASP.NET MVC模式是微軟***推出的一種開發(fā)模式,目前***測試版本為Preview 2(Preview 3也即將問世)。因此,這一模式是否較之于ASP.NET Web表單模式更有利于提高軟件的生產(chǎn)效率還有待于開發(fā)實踐的檢驗。

本文來自朱先忠的博客:《ASP.NET 3.5 MVC框架深度解析》。

【編輯推薦】

  1. 有關(guān)ASP.NET MVC框架的一些基礎(chǔ)知識
  2. Scott Gu教你使用ASP.NET MVC 2新功能
  3. 微軟發(fā)布ASP.NET MVC 2預(yù)覽版 多項功能更新
  4. 13個不可不知的ASP.NET MVC擴展點
  5. 學(xué)習(xí)ASP.NET MVC的基本概念
責(zé)任編輯:yangsai 來源: 朱先忠的博客
相關(guān)推薦

2009-07-22 18:02:27

論壇應(yīng)用程序ASP.NET MVC

2009-07-22 18:07:55

論壇應(yīng)用程序ASP.NET MVC

2009-07-24 11:25:53

Web應(yīng)用程序工程ASP.NET MVC

2009-07-27 16:09:50

2009-07-29 17:01:13

2009-08-05 10:16:54

部署ASP.NET應(yīng)用

2009-07-20 16:08:04

ASP.NET應(yīng)用程序

2009-07-21 15:02:19

ASP.NET應(yīng)用程序

2009-07-22 17:32:40

ASP.NET應(yīng)用程序

2009-07-23 13:26:21

2009-07-23 14:25:03

ASP.NET 2.0

2009-07-29 17:21:10

2009-07-29 10:30:53

Web應(yīng)用程序ASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2009-07-28 10:11:06

ASP.NET應(yīng)用程序

2009-08-04 11:46:09

2009-07-21 15:14:32

預(yù)編譯應(yīng)用程序ASP.NET

2009-07-24 10:41:00

ASP.NET Web

2009-07-21 15:23:55

預(yù)編譯Web應(yīng)用程序ASP.NET

2009-07-27 17:46:42

WCF服務(wù)ASP.NET應(yīng)用程序
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品高潮呻吟久久av野狼 | 亚洲视频www | 欧美久久久久 | 午夜一区 | 精品久久中文字幕 | 久久一区二 | 欧美精品一区二区三区四区 在线 | 国户精品久久久久久久久久久不卡 | 欧洲一区在线观看 | 国产ts人妖系列高潮 | 不卡一区 | 欧美视频二区 | 91久久精品一区二区三区 | 亚洲精品欧美一区二区三区 | 日韩一区二区在线视频 | 天堂网中文 | 在线播放国产一区二区三区 | 狠狠涩 | 欧美精品在欧美一区二区少妇 | 一级毛片视频 | 黄色在线免费观看视频 | www久久久| 中文字幕第二区 | 午夜在线免费观看 | 7777奇米影视 | 欧美午夜精品久久久久久浪潮 | 国产精品久久久久久一区二区三区 | 在线视频一区二区 | 亚洲一区二区精品 | 国产欧美精品区一区二区三区 | 欧美一区二区在线看 | 亚洲国产一区二区三区在线观看 | 日本精品视频 | 亚洲视频 欧美视频 | 一区二区三区国产精品 | 国产在线精品一区 | 国产精品欧美一区二区三区不卡 | a级毛片毛片免费观看久潮喷 | 毛片综合 | 久久激情五月丁香伊人 | 欧美在线二区 |