2012-10-03 72 views
0

我會嘗試儘可能簡單地描述我的問題。我有幾個在運行時動態加載的控制器。這些控制器爲不同的合作伙伴提供多個網絡apis。我想要實現的是在訪問控制器之前在URL中有一個前綴。換句話說,我有Partner1和Partner2。他們都有一些控制器,例如ASP.NET MVC中的條件路由

Partner1:Service1Controller,Service2Controller2。 Partner2:Api1Controller,Api2Controller等

現在我想實現以下功能。我希望partner1的控制器只能在url中使用Partner1前綴訪問,例如http://somehost.com/Partner1/Service1,但我不希望Api1Controller可以從http://somehost.com/Partner1/Api1訪問,但應該可以從http://somehost.com/Partner2/Api1訪問。

有什麼辦法可以達到我的目標嗎?

感謝

回答

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)"} 
); 

圖路線考覈的第四參數約束定義爲正則表達式

0

你可以創建一個自定義ActionFilter看起來在請求和用戶,並確定是否路由有效。如果不是,那麼你可以返回一些ActionResult,它重定向或者向用戶返回一個錯誤。