MVC の Request ライフサイクルについて読んでいました。以下の行を理解するのに行き詰まりました。
UrlRoutingModule がリクエストをインターセプトする
クエリ - UrlRoutingModule とは?
私はグーグルでたくさん検索しましたが、役に立つものは見つかりませんでした
MVC の Request ライフサイクルについて読んでいました。以下の行を理解するのに行き詰まりました。
UrlRoutingModule がリクエストをインターセプトする
クエリ - UrlRoutingModule とは?
私はグーグルでたくさん検索しましたが、役に立つものは見つかりませんでした
UrlRoutingModule
ASP.NET MVC ベースの Web アプリケーションへの要求は、最初に HTTP モジュールであるオブジェクトを通過します。このモジュールはリクエストを解析し、ルート選択を実行します。オブジェクトは、現在のリクエストに一致する最初のUrlRoutingModule
ルート オブジェクトを選択します。(ルート オブジェクトは、 を実装するクラスでRouteBase
あり、通常はクラスのインスタンスですRoute
。)一致するルートがない場合、UrlRoutingModule
オブジェクトは何もせず、要求を通常の ASP.NET または IIS 要求処理にフォールバックさせます。
オブジェクトは、選択された Route オブジェクトから、インターフェイスを実装し、オブジェクトに関連付けられているUrlRoutingModule
オブジェクトを取得します。通常、MVC アプリケーションでは、これはクラスのインスタンスになります。インスタンスは、インターフェイスを実装するオブジェクトを作成します。オブジェクトは、最終的にリクエストを処理するコントローラを選択します。詳細については、「ASP.NET ルーティング」を参照してください。IRouteHandler
Route
MvcRouteHandler
MvcRouteHandler
MvcHandler
IHttpHandler
MvcHandler
およびクラスは、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 method
on 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