<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET MVC是如何運行的[1]: 建立在“偽”MVC框架上的Web應用

      ASP.NET由于采用了管道式設計,具有很好的擴展性,而整個ASP.NET MVC應用框架就是通過擴展ASP.NET實現的。通過上面對ASP.NET管道設計的介紹,我們知道ASP.NET的擴展點只要體現在HttpMoudle和HttpHandler這兩個核心組建之上,實際上整個ASP.NET MVC框架就是通過自定義的HttpMoudle(UrlRoutingModule)和HttpHandler(MvcHandler)實現的。為了上讀者從整體上把握ASP.NET MVC的工作機制,接下來我按照其原理通過一些自定義組件來模擬ASP.NET MVC的運行原理,我們也可以將此視為一個“迷你版”的ASP.NET MVC。值得一提的是,為了讓讀者根據該實例從真正的ASP.NET MVC中找到對應的組件,我完全采用了與ASP.NET MVC一致的類型命名方式。[源代碼從這里下載]

      在正式介紹我們自己創建 的“迷你版”ASP.NET MVC的實現原理之前,我們不妨來看看建立在該框架之上的Web應用如何實現。我們通過Visual Studio創建一個空的ASP.NET Web應用(注意不是ASP.NET MVC應用),我們不會引用System.Web.Mvc.dll這個程序集,所以你在接下來的程序中看到的定義在該程序集中的同名類型都是我們自行定義的。

      我們首先定義了如下一個SimpleModel類型,它表示最終需要綁定到View上的數據。簡單起見,同時也為了驗證針對Controller和Action的解析機制,SimpleModel定義的兩個屬性分別表示當前請求的目標Controller和Action。

         1: public class SimpleModel
         2: {
         3:     public string Controller { get; set; }
         4:     public string Action { get; set; }
         5: }

      像真正的ASP .NET MVC應用開發一樣,我們需要定義Controller類型。如下面的代碼片斷所示,按照我們熟悉的命名方式(以字符Controller作為后綴),我們定義了如下一個HomeController。HomeController實現的抽象類型ControllerBase是我們自行定義的。以自定義的ActionResult作為返回類型的Index方法表示Controller的Action,它接受一個SimpleModel類型的對象作為參數。該Action方法返回的ActionResult是一個RawContentResult對象,顧名思義,RawContentResult就是將指定的內容進行原樣顯示。在這里我們將作為參數的SimpleModel對象的Controller和Action屬性顯示出來。

         1: public class HomeController: ControllerBase
         2: {
         3:     public ActionResult Index(SimpleModel model)
         4:     {
         5:         string content = string.Format("Controller: {0}<br/>Action:{1}", model.Controller, model.Action);
         6:         return new RawContentResult(content);
         7:     }
         8: }

      ASP.NET MVC根據請求地址來解析出用于處理該請求的Controller的類型和Action方法名稱。具體來說,我們預注冊一些包含Controller和Action名稱作為站位符的(相對)地址模板,如果請求地址符合相應地址模板的模式,Controller和Action名稱就可以正確地解析出來。和ASP.NET MVC應用類似,我們在Global.asax中注冊了如下一個地址模板({controller}/{action})。

         1: public class Global : System.Web.HttpApplication
         2: {
         3:     protected void Application_Start(object sender, EventArgs e)
         4:     {            
         5:         RouteTable.Routes.Add("default",new Route{Url = "{controller}/{action}"});
         6:         ControllerBuilder.Current.SetControllerFactory(new DefaultControllerFactory());
         7:         ControllerBuilder.Current.DefaultNamespaces.Add("WebApp");
         8:     }
         9: }

      在如上所示的用于進行地址模板注冊的Application_Start方法之中,我們還注冊了一個用于創建Controller對象的工廠。前面定義的HomeController定義在命名空間WebApp下,由于請求地址中只能解析出Controller類型的名稱,我們需要將該命名空間注冊為當前ControllerBuilder的默認命名空間。RouteTable、ControllerBuilder和DefaultControllerFactory都是我們自定義的類型。

      正如我上面所說,ASP.NET MVC是通過一個自定義的HttpModule實現的,在這個“迷你版”ASP.NET MVC框架中我們也將其起名為UrlRoutingModule。在運行Web應用之前,我們需要通過配置對該自定義HttpModule進行注冊,下面是相關的配置。

         1: <configuration>
         2:   <system.webServer>
         3:      <modules>
         4:           <add name="UrlRoutingModule" 
         5:                type="Artech.MiniMvc.UrlRoutingModule, Artech.MiniMvc"/>      
         6:     </modules>    
         7:   </system.webServer>
         8: </configuration>

      到目前為止,所有的編程和配置工作已經完成。為了 讓定義在HomeController中的Action方法Index來處理針對該Web應用的訪問請求,我們需要指定與之匹配的地址(符合定義在注冊地址模板的URL模式)。如下圖所示,由于在瀏覽器中輸入地址(http://.../Home/Index)正好對應著HomeController的Index操作,所以對應的方法會被執行,而執行的結果就是將當前請求的目標Contrller和Action的名稱顯示出來。

      image

      上面我們我們演示了如何在我們自己創建的“迷你版”ASP.NET MVC框架中創建一個Web應用,從中我們可以看到和創建一個真正的ASP.NET MVC應用別無二致。接下來我們就來逐步地分析這個自定義的ASP.NET MVC框架是如何建立起來的,而它也代表了真正的ASP.NET MVC框架的工作原理。

      ASP.NET MVC是如何運行的[1]: 建立在“偽”MVC框架上的Web應用
      ASP.NET MVC是如何運行的[2]: URL路由
      ASP.NET MVC是如何運行的[3]: Controller的激活
      ASP.NET MVC是如何運行的[4]: Action的執行

      posted @ 2012-03-11 09:34  Artech  閱讀(24659)  評論(53)    收藏  舉報
      主站蜘蛛池模板: 色www视频永久免费| 亚洲精品乱码久久久久久按摩高清| 免费视频一区二区三区亚洲激情| 桃花岛亚洲成在人线AV| 无码人妻精品丰满熟妇区| 久热久热中文字幕综合激情| 亚洲国产成人资源在线| 狠狠色狠狠色综合| 国产无遮挡性视频免费看| 黑森林福利视频导航| 99久久精品费精品国产一区二区| 黑人猛精品一区二区三区| 亚洲国产一区二区三区四| 一区二区三区成人| 国产精品香港三级国产av| 中文字幕亚洲综合第一页| 成人影片麻豆国产影片免费观看| 久久精品一本到99热免费| 一面膜上边一面膜下边视频| 日韩免费无码一区二区三区| 亚洲av日韩在线资源| 日韩人妻少妇一区二区三区| 亚洲av本道一区二区| 精品无码国产日韩制服丝袜| 国产午夜精品福利免费不| 92国产福利午夜757小视频| 免费A级毛片樱桃视频| 久久国产热这里只有精品| 欧美老熟妇乱子伦牲交视频| 日韩最新中文字幕| 福利一区二区不卡国产| √天堂资源网最新版在线| 日韩人妻精品中文字幕专区 | 999精品色在线播放| 亚洲AV成人片不卡无码| 日本丰满熟妇videossex一| 亚洲乱码一二三四区| 亚洲最大成人在线播放| 专栏| 国产中文三级全黄| 人妻无码不卡中文字幕系列|