2

RouteCollectionURL を含む文字列があります。実行されるルートの名前を取得する方法を知っている人はいますか?

そのようなメソッドRouteCollection.PredictRoute(url)は、ルート名または実行される物理ファイルを返します。

Web サーバーのログ ファイルからいくつかの統計を作成したいと考えています。RouteCollectionその統計に使用されたものを再利用すると非常に便利です。

どうもありがとう!

4

2 に答える 2

0

リクエストとコンテキストが利用できないMVCアプリケーションの外でこれを行いたいと思います(あなたが述べたように、ログファイルのみ)。

残念ながら、それは簡単なことではありません。このようなマッチング メソッドを記述するには、 namespace のさまざまなクラスにある URL 解析用の MVC フレームワーク コードを再利用する (または、さらに悪いことに書き直す) 必要がありますSystem.Web.Http.Routing。ソース コードは、CodePlexで Apache 2.0 ライセンスの下で入手できます。

代わりに、ルート名をログ ファイルに含めて、後で統計に使用できる簡単な方法があると思います。以下をご覧ください。

あなたができることは、デフォルトMvcHandlerのクラスを拡張してそのProcessRequestメソッドをオーバーライドすることです。そこで、基本クラスの実装を呼び出し、その直後に を使用して処理を行うことができますRequestContext.RouteData

このクラスRouteDataには、他のものに加えて、現在のルート (ルート コレクションで定義したもの) も含まれています。これは、RouteData.Routeプロパティを通じてアクセスできます。

これMvcHandlerが機能するのは、 によって (独自の MVC インフラストラクチャを作成していない限り) 常に委任され、MvcRouteHandler各要求の処理を処理するためです。これは、既存のルート データからコントローラー データを取得し、IController実装をインスタンス化し、最終的にそれを実行するものです。

于 2013-05-26T18:51:43.523 に答える
0

以下は、URL が正しいコントローラーとアクションにマップされていることをテストするために使用したコードのスニペットです。ルート名も検査できるはずです。

RouteConfig.RegisterRoutes(routes);
RouteData routeData = routes.GetRouteData(context);
string controller = routeData.Values["controller"];
string action = routeData.Values["action"];

変数 routes は RouteCollection オブジェクトで、 context は HttpContextBase オブジェクトです。

于 2013-05-26T19:08:05.720 に答える