4

ASP.Net MVC を低レベルで理解しようとしています。具体的には、MVC ランタイムがどのように開始されるかを理解しようとしています。コールスタック/逆コンパイルを最初に掘り下げると、MvcRouteHandler によって開始され、MvcHandler が構築されるようです。ただし、MvcRouteHandler が登録されている場所が見つからないようです。この RouteHandler はどのようにして ASP.Net パイプラインに追加されるのでしょうか?

更新
さらに調べたところ、クラスの拡張機能が含まれているように見えるクラスへのMvcRouteHandler構造をたどりました。コンストラクターを含む特定のメソッドには、次の定義があります。 RouteCollectionExtensionsRouteCollection

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 イベントで始まるコードによって構成されます。

これは正しいです?

4

1 に答える 1

5

要求は ASP.net パイプラインを通過し、UrlRoutingModuleHTTP モジュールによってキャッチされます。

詳細: ASP.NET MVC はどのように機能しますか?

編集:ルーティングモジュールは、サイトのweb.configが継承するマシンのweb.configにインストールされます。あなたはそれを見つけることができます%systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config

ここに画像の説明を入力

于 2012-10-24T22:54:26.663 に答える