0

私の問題をできるだけ簡単に説明しようと思います。実行時に動的にロードされるコントローラーがいくつかあります。これらのコントローラーは、さまざまなパートナーの複数の Web API をホストします。私が達成したいのは、コントローラーにアクセスする前に URL にプレフィックスを付けることです。つまり、Partner1 と Partner2 がいます。どちらにもいくつかのコントローラーがあります。たとえば、

Partner1: Service1Controller、Service2Controller2。Partner2: Api1Controller、Api2Controller など。

今、私は次のことを達成したいと考えています。partner1 のコントローラーには、たとえばhttp://somehost.com/Partner1/Service1のように、URL に Partner1 プレフィックスを使用してのみアクセスできるようにしたいのですが、 http://somehost.com/Partner1/から Api1Controller にアクセスできるようにしたくありません。Api1ですが、代わりにhttp://somehost.com/Partner2/Api1からアクセスできる必要があります。

私の目標を達成する方法はありますか?

ありがとう

4

2 に答える 2

1

洗練されていない解決策は、2 つの別々のルート マッピングを使用することです。

routes.MapRoute(
    "partner1", 
    "partner1/{controller}/{action}",
    new { contoller =  Service1Controller, action = "Index" },  
    new { contoller = @"(Service1Controller)|(Service2Controller)"}
);

routes.MapRoute(
    "partner2", 
    "partner2/{controller}/{action}",
    new { controller = Api1Controller, action = "Index" },   
    new { contoller = @"(Api1Controller)|(Api2Controller)"}
);  

MapRoute の 4 番目のパラメーターは、制約を正規表現として定義します

于 2012-10-03T22:09:27.640 に答える
0

Request と User を見て、ルートが有効かどうかを判断するカスタム ActionFilter を作成できます。そうでない場合は、リダイレクトするかユーザーにエラーを返す ActionResult を返すことができます。

于 2012-10-03T21:15:26.243 に答える