16

MVC の Request ライフサイクルについて読んでいました。以下の行を理解するのに行き詰まりました。

UrlRoutingModule がリクエストをインターセプトする

クエリ - UrlRoutingModule とは?

私はグーグルでたくさん検索しましたが、役に立つものは見つかりませんでした

4

3 に答える 3

26

UrlRoutingModuleASP.NET MVC ベースの Web アプリケーションへの要求は、最初に HTTP モジュールであるオブジェクトを通過します。このモジュールはリクエストを解析し、ルート選択を実行します。オブジェクトは、現在のリクエストに一致する最初のUrlRoutingModuleルート オブジェクトを選択します。(ルート オブジェクトは、 を実装するクラスでRouteBaseあり、通常はクラスのインスタンスですRoute。)一致するルートがない場合、UrlRoutingModuleオブジェクトは何もせず、要求を通常の ASP.NET または IIS 要求処理にフォールバックさせます。

オブジェクトは、選択された Route オブジェクトから、インターフェイスを実装し、オブジェクトに関連付けられているUrlRoutingModuleオブジェクトを取得します。通常、MVC アプリケーションでは、これはクラスのインスタンスになります。インスタンスは、インターフェイスを実装するオブジェクトを作成します。オブジェクトは、最終的にリクエストを処理するコントローラを選択します。詳細については、「ASP.NET ルーティング」を参照してください。IRouteHandlerRouteMvcRouteHandlerMvcRouteHandlerMvcHandlerIHttpHandlerMvcHandler

およびクラスは、ASP.NET MVC フレームワークへのエントリ ポイントですUrlRoutingModuleMvcRouteHandler次のアクションを実行します。

  • MVC Web アプリケーションで適切なコントローラーを選択します。

  • 特定のコントローラー インスタンスを取得します。

  • コントローラーのExecuteメソッドを呼び出します。

参照

于 2013-05-20T07:38:37.020 に答える
3

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 ハンドラーとして使用します。

于 2013-05-20T07:35:04.183 に答える
0

さらにいくつかの詳細を追加するだけです。
@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

于 2014-02-23T07:04:37.947 に答える