2012-10-24 73 views
4

我想了解ASP.Net MVC在較低的水平。具體來說,我想了解MVC運行時如何開始。對於我最初深入的調用堆棧/反編譯,看起來它是由MvcRouteHandler開始的,然後構造MvcHandler。但是,我似乎無法找到MvcRouteHandler的註冊位置。這個RouteHandler如何被添加到ASP.Net管道中?MvcRouteHandler在哪裏註冊

更新
經進一步檢查,我已經查明MvcRouteHandler建設納入RouteCollectionExtensions類看起來以包含RouteCollection類擴展。包含構造函數的具體方法有以下定義:

public static Route MapRoute(this RouteCollection routes, 
          string name, 
          string url, 
          object defaults, 
          object constraints, 
          string[] namespaces) 

我認爲關鍵是在這行代碼中發現:

Route route = new Route(url, new MvcRouteHandler()); 

所以,對我來說這是那裏的MvcRouteHandler被分配。事件的整個鏈條是這樣的:

一切都在開始Global.asax.cs中

Application_Start() 
RouteConfig.RegisterRoutes 
RouteCollectionExtensions.MapRoute(this RouteCollection routes, string name, string url, object defaults) 
RouteCollectionExtensions.MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints) 
RouteCollectionExtensions.MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces) 

從這裏,它只是一個路徑一致,然後導致MvcRouteHandler中使用的物質調用MvcHandler並啓動整個事件鏈。所以我最初的假設是MvcRouteHandler在某處的配置中註冊是錯誤的。而是通過global.asax.cs文件的Application_Start事件中的代碼進行配置。

這是正確的嗎?

回答

5

請求通過ASP.net管道,然後被UrlRoutingModule HTTP模塊捕獲。

更多信息:How does ASP.NET MVC work?

編輯:路由模塊安裝在你的機器的web.config,您的網站的web.config繼承。您可以在%systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config

enter image description here

+0

大發現!謝謝。 –

+0

在完整閱讀本文後,我不能說我知道MvcRouteHandler註冊的地方更好。它說,路由處理程序是在web.config中註冊的,但是在我的web.config中沒有這樣的入口,但是MVC仍然可以繼續工作。這篇文章有很多很棒的信息,但它並沒有最終回答這個問題。我想可能是在MVC 4中他們改變了一些東西。 –

+0

@Matt:剛剛編輯答案 –

相關問題