0

areacontrollerおよびの3 つの文字列が与えられますaction。私のルートにはデフォルト値が定義されているため、それらのいくつかは空の値を持つ可能性があります。たとえば、actionが空の場合、 にマップされIndexます。

これら 3 つの文字列をアプリケーションのルーティングを介して渡し、空の値がデフォルト値にマップされた後に実際の値を取得したいと考えています。これは可能ですか?

多分それはこのようなことをすることによって実行可能です

RouteTable.Routes.GetRouteData(context)

HttpContextしかし、オブジェクト全体を構築せずにそれを行う方法はありますか?

4

1 に答える 1

0

最初に行う必要があるのは、3 つの文字列を取得し、それをルーティング システムを介して渡すことができる URL に変換することです。これを行う方法は、作成したルートによって異なります。ルート テーブルに典型的なデフォルト ルートがあるとします。

        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller="Home", action = "Index", id = UrlParameter.Optional }
        );

次に、URL パターン「{area}/{controller}/{action}/{id}」を使用して URL を構築する必要があります。あなたの場合、一部の文字列が空になる可能性があるため、URL にすべてのセグメントが含まれていない可能性があります。たとえば、Area="Admin" で Controller と Action が空の場合、このルートに基づく URL は次のようになります。

~/Admin

もちろん、これにより、システム内のルートが既にわかっている場合、なぜルートを調べてデフォルトを取得できないのかという疑問が生じます。

テストする URL を取得したら、HttpContentBase オブジェクトのモックを作成し、RouteTable.Routes.GetDate(httpContext) を介して実行する必要があります。構成要素の HttpRequestBase または HttpResponseBase クラスの多くを実際にモックする必要がないため、これを行うための単純なボイラー プレート コードがあります。たとえば、Moq モック フレームワークを使用して HttpContextBase オブジェクトをモックする例については、こちらを参照してください。

于 2013-01-22T23:47:02.390 に答える