ASP.NET MVCルーティング(三)


ASP.NET MVCルーティング(三)
前言
前の2篇の学习を通じて(通って)ルーティングシステムに対して1つの初歩的な理解があって、しかもルーティングシステムの中のUrlの规则に対して简単な理解があって、みんなの脳裏の中で1つの印象があって、それではルーティングシステムはASP.NETMVCの位置はどこですか?
RouteData
ルーティングシステムはASP.NETMVCフレームワークのデフォルトの実装場所はRulRoutingModuleです.Moduleの次のページについて説明します.
このトピックでは、MVCフレームワークは、サーバ側に登録されているRouteオブジェクトのセットとリクエストされたUrlとが一致して得られるRouteオブジェクトを説明しますが、後のフレームワークの使用ではRouteオブジェクトを操作するのではなく、RouteDataオブジェクトにカプセル化します.
RouteDataオブジェクトのコンストラクション関数定義を見てみましょう.
1         public RouteData (RouteBase route, IRouteHandler routeHandler)
2         {
3             
4             Route = route;
5             RouteHandler = routeHandler;
6 
7             DataTokens = new RouteValueDictionary ();
8             Values = new RouteValueDictionary ();
9         }

RouteBaseタイプのオブジェクトがRouteオブジェクトのベースクラスです.以下に説明します.
IrouteHandlerタイプは、システムのデフォルトのタイプMvcRouteHandlerタイプを使用しますが、MvcRouteHandlerタイプは、要求コンテキストパラメータオブジェクトのデフォルトの生成に基づいてIHttpHandlerインタフェースのMvcHandlerタイプを実現し、MvcHandlerタイプはコントローラ部分に接続するキーであり、後続のページでは説明が多くなります.
次に、図1のように、RulRoutingModuleオブジェクトでRouteDataオブジェクトを取得するためのデフォルトの実装について説明する.
図1
RouteDataオブジェクトは、要求されたUrlに基づいてマッチングされたものであり、図1からも分かるように、要求はContextパラメータに含まれており、パラメータのオブジェクトモデルも図中に表示されており、RouteCollectionオブジェクトによって呼び出されるように見えるGetRouteData()メソッドは、実際にはRouteCollectionオブジェクト(サーバ側に先に登録されているいくつかのRouteオブジェクト)の各RouteオブジェクトによってGetRouteData()メソッドが1回実行され、一致するものがあれば戻ってきます.
 
RouteDataオブジェクトは、図2に示すオブジェクトモデルのように、コントローラ名、RouteHanderオブジェクト(ルーティング要求処理オブジェクト)を含む
図2
我々は、Values属***とRouteHandler属***に注目するだけでよい.図1の青い線の矢印は属***のタイプを示し、Values属***はUrlにマッチング解析後の対応値を要求している.RouteのUrlルールが「{controller}/{action}」と定義され、要求されたUrlが「Home/Index」であるとすれば、ValuesのKeys値集合がcontroller、actionの2つのそれぞれに対応する値がHome、Indexである.一方,RouteHandler属***はマッチングに成功したそのRouteオブジェクトを取得したRouteHandler属***である.
 
まとめ:
ルーティングの実行手順を大まかに要約する
  • 現在のシステムにルーティング(ルーティング名、カスタムUrlルール、ネーミングスペース、およびいくつかのUrl制約などの情報)
  • を登録する.
  • 各ルーティングオブジェクトは、システムルーティングセットに登録すると自動的にUrlルールの解析が完了し、ルーティングオブジェクト(Route)によって
  • が保存される.
  • リクエストに従ってサーバに到着すると、リクエストUrlはサーバのルーティングセット(RouteCollection)でマッチングされる(マッチングのルールはコレクションの順序に従い、各RouteオブジェクトはリクエストUrlに従って自分のUrlルールに従って順番にマッチングされ、適切なものが見つかったらマッチングが終了するので、ルーティングが最初にマッチングするのが最適ではないことを覚えておいてください).一致するRouteオブジェクトに従ってカプセル化し、最終的にRouteDataオブジェクトインスタンスに戻ります.

  • 次の図2枚は皆さんが記憶を理解しやすいので、不適切なところがあればご指摘ください.
    図3
    図4
    Ps:
    この部分の知識はあなたにどれだけの向上をもたらすことはありません.ルーティングに関する印象を与えることができるはずです.
    このいくつかの編を見てもルートについてあまり熟知していません.あなたに少しの収穫があれば、私は満足しています.ルートの他の部分については、後続の章で説明し続けます.