MVC の Request ライフサイクルについて読んでいました。以下の行を理解するのに行き詰まりました。
UrlRoutingModule がリクエストをインターセプトする
クエリ - UrlRoutingModule とは?
私はグーグルでたくさん検索しましたが、役に立つものは見つかりませんでした
MVC の Request ライフサイクルについて読んでいました。以下の行を理解するのに行き詰まりました。
UrlRoutingModule がリクエストをインターセプトする
クエリ - UrlRoutingModule とは?
私はグーグルでたくさん検索しましたが、役に立つものは見つかりませんでした
UrlRoutingModuleASP.NET MVC ベースの Web アプリケーションへの要求は、最初に HTTP モジュールであるオブジェクトを通過します。このモジュールはリクエストを解析し、ルート選択を実行します。オブジェクトは、現在のリクエストに一致する最初のUrlRoutingModuleルート オブジェクトを選択します。(ルート オブジェクトは、 を実装するクラスでRouteBaseあり、通常はクラスのインスタンスですRoute。)一致するルートがない場合、UrlRoutingModuleオブジェクトは何もせず、要求を通常の ASP.NET または IIS 要求処理にフォールバックさせます。
オブジェクトは、選択された Route オブジェクトから、インターフェイスを実装し、オブジェクトに関連付けられているUrlRoutingModuleオブジェクトを取得します。通常、MVC アプリケーションでは、これはクラスのインスタンスになります。インスタンスは、インターフェイスを実装するオブジェクトを作成します。オブジェクトは、最終的にリクエストを処理するコントローラを選択します。詳細については、「ASP.NET ルーティング」を参照してください。IRouteHandlerRouteMvcRouteHandlerMvcRouteHandlerMvcHandlerIHttpHandlerMvcHandler
およびクラスは、ASP.NET MVC フレームワークへのエントリ ポイントですUrlRoutingModule。MvcRouteHandler次のアクションを実行します。
MVC Web アプリケーションで適切なコントローラーを選択します。
特定のコントローラー インスタンスを取得します。
コントローラーのExecuteメソッドを呼び出します。
MVC プロジェクトの Global.asax の中を見ると、 というメソッドが表示されRegisterRoutesます。この中に、「既定の」ASP.NET MVC ルートが表示されます。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
このルートは、URL リクエストの形式と、これをコントローラー アクションにマップする方法を指定します。つまり、ルートの最初の部分はコントローラーを識別し、2 番目の部分はアクションを識別します。これにカスタムルートを追加することができます。さまざまな形式の URL を操作できます。
はUrlRoutingModule、着信リクエスト URL を受け取り、それをこれらのルートの 1 つに一致させる役割を担う単純なクラスであるため、正しいコントローラー アクションが実行されます。
MSDNから:
UrlRoutingModule クラスは、HTTP 要求を ASP.NET アプリケーションのルートに一致させます。モジュールは、RouteCollection プロパティのすべてのルートを反復処理し、HTTP 要求の形式と一致する URL パターンを持つルートを検索します。モジュールが一致するルートを見つけると、そのルートの IRouteHandler オブジェクトを取得します。モジュールはルート ハンドラーから IHttpHandler オブジェクトを取得し、それを現在の要求の HTTP ハンドラーとして使用します。
さらにいくつかの詳細を追加するだけです。
@Ant P で述べたように、以下のコードはルートを登録するために使用されます
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
実際MapRouteにはExtension methodon Routes コレクションであり、以下のように内部的に実装されています。
注:私の理解によると、これは単なる疑似コードです。
var url = "{controller}/{action}/{id}";
var defaults = new RouteValueDictionary();
defaults.Add("controller", "Home");
defaults.Add("action", "Index");
defaults.Add("id", UrlParameter.Optional);
var routeHandler = new MvcRouteHandler();
var Default = new Route(url,defaults,routeHandler);
routes.Add(Default);
MvcRouteHandler のGetHttpHandler()メソッドは、MvcHttpHandlerクラスのインスタンスを返します。これは、内部でさらなるリクエストを処理します。
これがの役割を理解するのに役立つことを願っていますUrlRoutingModule