とRouteCollection
URL を含む文字列があります。実行されるルートの名前を取得する方法を知っている人はいますか?
そのようなメソッドRouteCollection.PredictRoute(url)
は、ルート名または実行される物理ファイルを返します。
Web サーバーのログ ファイルからいくつかの統計を作成したいと考えています。RouteCollection
その統計に使用されたものを再利用すると非常に便利です。
どうもありがとう!
リクエストとコンテキストが利用できないMVCアプリケーションの外でこれを行いたいと思います(あなたが述べたように、ログファイルのみ)。
残念ながら、それは簡単なことではありません。このようなマッチング メソッドを記述するには、 namespace のさまざまなクラスにある URL 解析用の MVC フレームワーク コードを再利用する (または、さらに悪いことに書き直す) 必要がありますSystem.Web.Http.Routing
。ソース コードは、CodePlexで Apache 2.0 ライセンスの下で入手できます。
代わりに、ルート名をログ ファイルに含めて、後で統計に使用できる簡単な方法があると思います。以下をご覧ください。
あなたができることは、デフォルトMvcHandler
のクラスを拡張してそのProcessRequest
メソッドをオーバーライドすることです。そこで、基本クラスの実装を呼び出し、その直後に を使用して処理を行うことができますRequestContext.RouteData
。
このクラスRouteData
には、他のものに加えて、現在のルート (ルート コレクションで定義したもの) も含まれています。これは、RouteData.Route
プロパティを通じてアクセスできます。
これMvcHandler
が機能するのは、 によって (独自の MVC インフラストラクチャを作成していない限り) 常に委任され、MvcRouteHandler
各要求の処理を処理するためです。これは、既存のルート データからコントローラー データを取得し、IController
実装をインスタンス化し、最終的にそれを実行するものです。
以下は、URL が正しいコントローラーとアクションにマップされていることをテストするために使用したコードのスニペットです。ルート名も検査できるはずです。
RouteConfig.RegisterRoutes(routes);
RouteData routeData = routes.GetRouteData(context);
string controller = routeData.Values["controller"];
string action = routeData.Values["action"];
変数 routes は RouteCollection オブジェクトで、 context は HttpContextBase オブジェクトです。